Component model for wrap packages of cards

ABSTRACT

A component model suitable for use in defining, delivering and rendering wrapped packages of cards in a manner particularly well suited, but not limited to, display on mobile devices is described. Using the described component model, each card may selectively include media content, a palette of application functionality and/or supporting e-commerce related services.

CROSS REFERENCE TO RELATED APPLICATIONS

This application claims the benefit of U.S. Provisional PatentApplication Nos. 62/062,056 (P001P) and 62/062,061 (P002P), both filedon Oct. 9, 2014 and both entitled “Wrap Package of Cards for Conveying aNarrative With Media Content, Providing Application Functionality, andEngaging Users in E-Commerce”. This application further claims priorityof U.S. Provisional Patent Application Nos. 62/084,171 (P005P), filedNov. 25, 2014; 62/091,866 (P005P2), filed Dec. 15, 2014; 62/114,675(P005P3), filed Feb. 11, 2015, 62/133,574 (P005P4) filed Mar. 16, 2015,62/195,642 (P005P5) filed Jul. 22, 2015; and 62/210,585 (P005P6), filedAug. 27, 2015, each entitled “Card Based Package for DistributingElectronic Media and Services. In addition, this application claims thebenefit of U.S. Provisional Application Nos. 62/145,360 (P015P), filedApr. 9, 2015; 62/170,438 (P016P2) filed Jun. 3, 2015; 62/170,569 (P018P)filed Jun. 3, 2015; and 62/193,830 (P019P), filed Jul. 17, 2015. Each ofthese priority applications is incorporated herein by reference for allpurposes.

BACKGROUND

The present invention relates generally to the distribution of media.More particularly, a variety of data structures, components, runtimeviewers and methods are described for defining, delivering and renderingwrapped packages of cards in a manner that is particularly well suited,but not limited to, display on mobile devices.

Media content developers have a variety of authoring tools, documentformats and content delivery schemes that can be used to create andpresent media content to users over networks, such as the Internet. Thecontent may be presented to users through a variety of mechanisms,including via web-sites, through the use of a mobile application (i.e.,a mobile app) and downloadable documents such as PDF files, PowerPointpresentations, etc. Each of these delivery mechanisms, however, haslimitations, particularly within a mobile computing environment.

PDF files, while relatively simple to author, have a number oflimitations. The content of PDF files is static. Once created anddelivered to a user over a network, there is no way for the viewer tointeract, through the PDF file, with the distributor. For example,retailers commonly create PDF versions of product catalogs, which aredistributed via a web page or email. When the PDF file is opened,however, the document is limited to only viewing. The viewer is unableto interact through the PDF file with the retailer, for instance, to askquestions about a particular item or to make a purchase. Also since PDFsare not dynamic documents, they need to be delivered to a consumingdevice as a single binary block. As a result PDFs, especially if theyare graphic intensive, are typically large files, which may be difficultto distribute, especially over wireless networks to mobile devices.Furthermore, most PDF files are created for viewing on desktopcomputers, which have relatively large display screens. As a result, theviewing of these PDF files on a mobile device, such as a mobile phonewith a relatively small viewing screen, often provides a pour userexperience.

Websites typically include one or more web pages that are accessed andviewable through a browser. Web pages are typically written in HTML5,CSS and JavaScript and include information such as text, colors,backgrounds, and often links to images and other types of media, to beincluded in the final view of the web page when displayed through thebrowser. Layout, typographic and color-scheme information is typicallydefined by a style sheet language (CSS), which can either be embedded inthe HTML or can be provided by a separate file, which is referenced fromwithin the HTML. When the URL of a web page is accessed, the hosting webserver will access and serve the appropriate files during a session withthe requesting device. The browser, running on the requesting device,will then present to the user the media content in the format dictatedby the HTML, as authored by the web page designer. In addition, webpages often include embedded hyperlinks. When selected, typically with apointing device such as a mouse, stylus or a finger, the hyperlink willnavigate to a new web page or media.

There are a number of advantages and disadvantages of using web sitesfor presenting media content to users. Web sites are typically“destinations”, meaning a potential viewer is usually required tonavigate to the web site to consume its content and functionality. Websites are thus generally not considered as portable objects that can bereadily delivered to consumers and other viewers, similar to messages.In addition, web sites are typically optimized for desktop computing,providing a rich opportunity for user interaction. With mobile devices,however, particularly mobile phones or wearable computing devices suchas smart watches, small display screens and limited input/outputcapabilities, often results in a poor user experience. When viewing aweb site through a screen on a mobile phone for example, it is oftenvery difficult to read text and view images. It is also very difficultto input data and navigate from one web page to another. As a result,the user experience of accessing and viewing web sites on mobilecomputing devices is often frustrating, resulting in a poor userexperience. In addition, the authoring of highly interactive,content-driven, web sites designed to create a positive user experienceoften requires a high degree of software expertise and sophistication.As a result, the creation of web sites designed for Internet commerce,for instance, is often very expensive and beyond the financial means ofmany small businesses and organizations.

More recently with the proliferation of “smart” mobile phones andtablets, mobile applications (often referred to as “apps”) have becomeexceedingly popular. Mobile apps are typically “stand alone” ormonolithic software programs, designed to perform a specific task orfunction, and intended to run on smart phones, tablet computers andother mobile devices. An extremely wide variety of apps are nowcommonplace, such as productively tools like email, calendars, etc.,gaming, GPS services such as Google Maps, text and/or voice messaging,live communication such as Skype, online banking, etc., to name just afew. With their growing popularity, to a significant degree, apps havereplaced web sites as the preferred method for content providers tocreate and distribute media content to mobile computing device users.

Apps also have many advantages and disadvantages. On the positive side,apps often provide a content-rich, rewarding, user experience. Awell-designed app allows users to sequence through a number of views,presenting content to users in an orderly fashion. On the negative side,apps are typically “stand alone” software applications that do noteasily interact with other software applications. As result, thefunctionality of apps is often limited, typically only capable ofperforming the specific task(s) that they were designed to perform, andworking only with the specific endpoints contemplated at the time theywere developed. As a result, it is often difficult, although notimpossible, to create the necessary integration functionality for a userto purchase a product and/or service through the app. Also, the designand authoring of apps is typically very complex and requires a very highlevel of design engineering expertise to create apps that areprofessional-looking and appealing. In addition, apps typically are notcross-platform. App developers usually have to create and distributemultiple versions of the same app for the iOS/Apple, Android/Google andthe Microsoft platforms for example. As a result, the development andmaintenance costs associated with creating and distributing an app iscomplex and very expensive. Finally, apps typically have to bedistributed through an application aggregator, such as the Apple AppStore or Google Play. Apps, therefore, typically cannot be directlydownloaded from the author/creator to users or consumers.

Recent advances in iOS 8 and Android, with multiple APIs, are making iteasier for multiple apps to communicate with one another. It is nowpossible, for example, to integrate iTune purchases as in-app purchaseor to purchase a physical product using an app like Shopify outside ofthe Apple environment and not bound by Apple purchase policies. Inaddition, tools are now available, such as Sencha and PhoneGap, tocreate a web-based multi-platform native app using HTML/CSS/JS(JavaScript) and embed them into a web view container inside of a nativeapp package.

However, even with these recent advances, it is still very difficult forcontent providers to create a package of media content and functionalitythat conveys a compelling narrative, is portable and designed to providea similar user experience on multiple devices, including mostly mobiledevices, and is self-contained, meaning the recipient typically does notneed to navigate to other sites to reap all the desired benefits and/oradvantages contemplated by the distributor of the media.

SUMMARY

Systems and methods for creating and delivering wrapped packages ofcards are disclosed. With wrap packages, each card is selectivelyauthored to include (i) media content, (ii) application functionalityand/or (iii) e-commerce related services. In addition, the cards can beauthored in one or more linear sequences so that the media contentconveys a “narrative” or “story” that unfolds as the wrap is consumed.Thus, the viewer is enticed to engage and use the application and/ore-commerce functionality, all within the context of the narrative story.In addition, wrap packages are portable objects that can be saved andreadily distributed similar to electronic messages.

Wrap packages offer a number of benefits and attributes currently notavailable with conventional methods of distributing content, such aswith PDFs, web sites, or stand-alone apps. Wrap packages offer a newplatform for storytelling, communicating ideas, and delivering highlyvisual and functional user experiences. Wrap packages enable a newbusiness paradigm for selling, advertising, publishing, increasing brandloyalty, offering services, and contacting and engaging new and oldcustomers alike, all ideally delivered to consumers on their mobiledevices, where they spend their time and consciousness. Where businessespreviously used to have to build destinations (e.g., websites) ormonolithic systems (e.g., “apps”), they can now, instead, provideconsumers with wrap packages, that are delivered like messages, and thatprovide the user experiences and functionality they really want andneed. As a result, wrap packages create opportunities for business toinnovate and improve products and services, leveraging the mobile web inways not before possible, because a convenient, enabling interface andplatform did not previously exist.

A variety of data structures, components, runtime viewers and methodsare described for defining, delivering and rendering wrapped packages ofcards in a manner that is particularly well suited, but not limited to,display on mobile devices. Each card may selectively include mediacontent, and a palette of application functionality and/or supportinge-commerce related services. The cards preferably all have the sameframe size and aspect ratio when rendered, and within each card, therelative positioning of the content of the card is immutable.

In a non-exclusive embodiment, the data structure of a wrap package isdefined in terms of a wrap descriptor that defines the content,structure, and layout of the set of cards. The wrap descriptorpreferably includes a plurality of card descriptors, each defining thecontent, structure, layout and/or presentation of an associated card.The wrap descriptor may take the form of a data object, such as a JSON(JavaScript Object Notation) data object. The wrap descriptor may havean associated unique identifier that can used to access the wrap. Aunique card identifier is also preferably associated with each of thecards which helps facilitate reuse of the same card in different wraps.

The descriptor may be used to associate various behaviors, styles and/orother attributes with specific cards/components/sub-components, etc.Within the descriptor structure, specific component and/or cardbehaviors may be declared rather than being included in-line within thedescriptor itself. Triggers may also optionally be included within acard to trigger an action in response to an event that occurs while theassociated card is displayed. Virtually any type of computer detectableevent can be used as a trigger, as for example: a user input thatselects a selected component while the associated card is displayed; asystem generated event; a change of state within the wrap when the wrapis displayed; etc.

In another aspect, a runtime viewer is used to render a runtime instanceof a wrap. In some embodiments, a wrap descriptor is returned to theruntime viewer in response to a request for a particular wrap. In suchembodiments, the runtime viewer is arranged to render a wrap instancebased on the wrap descriptor and preferably includes, or has the abilityto obtain, the definitions of any behaviors declared in the wrapdescriptor. In some implementations, the runtime viewer creates anobject graph, which may then be converted to an object model suitablefor rendering on the consuming device.

In another aspect a component model well suited for use in wrap packagesis described.

The use of the above-described descriptor(s) and runtime viewer basedarchitecture(s) to define and render wraps makes the wraps highlyportable and can help free the author of a wrap from the need tounderstand the idiosyncrasies of the various computing platforms thatthe wrap may be rendered on. At the same time, the ability to easilyimpart interesting behaviors, styles and other attributes to cards andcard components in a modular way can simplify the creation of media richcontent in a visually compelling manner while facilitating theintegration of a wide variety of different behaviors, services and/orfunctionalities with the card content in a format that is very wellsuited for presentation on mobile devices and a wide variety of othercomputing platforms and content consumption devices.

Wrap packages thus allow businesses and other organizations to simplyand cheaply create, distribute, and manage storytelling mobile web userexperiences, app like functionality, all delivered directly to consumersin the form of a wrap package. Where businesses used to have to builddestinations (websites) or use monolithic systems (apps), they can nowprovide consumers, particularly mobile device users, with a userexperience that delivers the content they want combined with acomplementary palette of functions and/or e-commerce related services.Wrap packages thus solves a number of current problem with the mobileweb. Unlike web sites, wrap packages are easy to consume on mobiledevices and offer the opportunity to create compelling narratives anduser experiences. In addition, the ability to incorporate app-likefunctionality into wraps provides a multi-function app-like experience,without having to be in an app, download an app, or open several apps.

BRIEF DESCRIPTION OF THE DRAWINGS

The invention and the advantages thereof, may best be understood byreference to the following description taken in conjunction with theaccompanying drawings in which:

FIG. 1 is a diagram illustrating a wrap package layout that includes aplurality of cards threaded together so as to be viewable in lineararrays in accordance with the principles of the present invention.

FIG. 2 is a diagram depicting the design, functionality and dataintegration capabilities of a representative card in a digital companionwrap package according to the principles of the present invention.

FIG. 3 is a diagram illustrating the media content and distributionmodel for distributing digital companion wrap packages in accordancewith the principles of the present invention.

FIG. 4 is a block diagram of a representative system for authoring,storing, distributing and consuming wrap packages in accordance with theprinciples of the present invention.

FIG. 5A diagrammatically illustrates selected components associated withdefining and rendering a representative wrap package.

FIG. 5B diagrammatically illustrates selected components associated withdefining and rendering a representative wrap package in accordance withanother embodiment that utilizes state descriptors and/or behaviorextensions.

FIG. 6 is a diagram illustrating the hierarchy of a wrap descriptor.

FIG. 6A is a diagram illustrating the hierarchy of a particular carddescriptor.

FIG. 6B is a diagram illustrating the hierarchy of a second carddescriptor embodiment.

FIG. 6C is a diagram illustrating the hierarchy of an embodiment of agallery card descriptor.

FIG. 6D is a diagram illustrating the hierarchy of an embodiment of atrigger component descriptor.

FIG. 6E is a diagram illustrating the hierarchy of an embodiment of afeed descriptor.

FIG. 6F is a diagram illustrating an embodiment of a widget descriptor.

FIGS. 7A-7M are a series of cards of an exemplary wrap package.

FIGS. 8A-8H are a series of cards for implementing an exemplary purchaseof products through a wrap package.

FIG. 9A is a diagrammatic representation of a wrap distributionenvironment highlighting item stores useful in delivering wrap packages.

FIG. 9B is a diagrammatic representation of an alternative server/storearchitecture suitable for delivering wraps.

FIG. 10 is a flow chart illustrating a method of delivering a wrappackage to a consuming device.

FIG. 11 is a flow chart illustrating a shim based method of delivering awrap package to a consuming device.

FIG. 12 is a flow chart illustrating a method of generating a view basedon a wrap descriptor and updating the view based on user inputs.

FIGS. 12A-12C illustrate a flow chart diagrammatically illustratingprocessing a wrap descriptor to create an object graph and DOM.

FIG. 13 illustrates the contents of a representative shim suitable foruse in the method of FIG. 11.

FIG. 14 illustrates a representative wrap component model.

FIG. 15 is a block diagram illustrating various components of anexemplary wrap runtime viewer.

FIG. 16 is a block diagram illustrating various components of anexemplary object graph.

FIG. 17 is a block diagram illustrating components of an exemplary eventhandler.

FIG. 18 is a diagram illustrating components associated with arepresentative event handler.

FIG. 19A illustrates a Twitter data feed rendered on a mobile devicethat has a wrap cover included therein.

FIGS. 19B-19D illustrate selected cards of the wrap associated with thewrap cover of FIG. 19A rendered in-line within the Twitter data feed.

FIGS. 20A-20D illustrate selected cards of the wrap associated with thewrap cover of FIG. 19A rendered in a new frame that occupies the entirescreen of the mobile device.

FIG. 21 illustrates a selected card of the wrap associated with the wrapcover of FIG. 19A rendered in-line within a Twitter data feed at adifferent aspect ratio than shown in FIGS. 19B-19D.

FIG. 22A illustrates a Facebook news data feed rendered on a mobiledevice that has a wrap cover included therein.

FIG. 22B illustrate the first card of the wrap associated with the wrapcover of FIG. 22A rendered in-line within the Facebook data feed.

FIGS. 23A-23D illustrates an exemplary wrap package with a media feedcard embedded therein.

FIG. 24 illustrates a wrap Twitter card arranged to incorporate apersonal twitter data feed into a wrap package.

FIG. 25 illustrates a wrap Facebook card arranged to incorporate aFacebook news data feed into a wrap package.

FIG. 26 illustrates a card incorporating a countdown widget.

FIGS. 27A-27E illustrate a series of cards of another exemplary wrappackage.

FIG. 28 is a diagram illustrating the hierarchy of a wrap descriptorthat includes global components.

FIG. 29 illustrates a global media player widget appearing within all ofthe cards of a wrap.

FIG. 30A illustrates a global audio widget appearing within all of thecards of a wrap.

FIG. 30B illustrates a play list overlay associated with the audiowidget of FIG. 30A.

FIG. 31 illustrates a wrap package that includes an alternative globalaudio widget.

FIG. 32 illustrates a global behavior.

FIG. 33 is a flow chart illustrating a representative process forgenerating card descriptors.

FIG. 34 is a flow chart illustrating a representative process forgenerating a wrap that includes global components.

In the drawings, like reference numerals are sometimes used to designatelike structural elements. It should also be appreciated that thedepictions in the figures are diagrammatic and not to scale.

DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS

The invention will now be described in detail with reference to variousembodiments thereof as illustrated in the accompanying drawings. In thefollowing description, specific details are set forth in order toprovide a thorough understanding of the invention. It will be apparent,however, to one skilled in the art, that the invention may be practicedwithout using some of the implementation details set forth herein. Itshould also be understood that well known operations have not beendescribed in detail in order to not unnecessarily obscure the invention.

The present disclosure is directed to the mechanisms that support thedistribution of media content, and a corresponding palette ofapplication functionality and/or e-commerce related services, in theform of wrapped packages of cards (interchangeably referred to herein asa “wrap”, “package” or “wrap package”).

A wrap package, which includes a set of cards arranged in one or morepredefined sequences, is a unique delivery mechanism for thedistribution of authored content and functionality. Wraps are typicallycharacterized by the following:

(a) Each card is selectively authored to include media, such as text,photos, images, video, documents, etc. Since the cards are arranged intheir one or more sequences, the media can be authored to convey a“story telling” narrative that unfolds as the cards are sequentiallybrowsed;

(b) The cards of wraps can also be selectively authored to include webor application like functionality;

(c) The layout of the content of any particular card is immutable. Thatis, the positional relationship between the displayed components of anygiven card remains the same, regardless of the size, width, height, ortype of display on which the wrap is rendered;

(d) The cards of a wrap all have a defined presentational aspect ratio(typically, but not necessarily, a portrait view);

(e) Wraps are designed for, although not necessarily limited to, mobile.On mobile devices having touch sensitive screens, the cards of wraps arenavigated by swipe-browsing. Wraps thus mimic the way people already usetheir smartphones and other mobile devices such as tablets. Every swipereveals a new card with a “bite-size” message and/or content.

As the cards are sequentially swiped during consumption, thestory-telling narrative of the wrap unfolds. In addition, the userexperience in viewing a given wrap is almost always the same, regardlessof the type of viewing device, since each card is immutable andmaintains the defined aspect at runtime.

Wraps are authored using a template-based authoring tool that requireslittle to no technical expertise. Wraps can, therefore, be simply andinexpensively created, allowing online retailers and others to promoteand deliver their brand, products and/or interactive services throughthe web with an ease previously not possible. Up to now, developing appsor web sites typically required a high degree of softwaresophistication, significant cost, and took months or weeks to create.Now with wrap, businesses and other content providers can inexpensivelycreate, with little software expertise, interactive wrap packages inhours or minutes.

Another advantage of wraps is that they do not require a dedicatedinfrastructure for distribution and viewing. By using wrap identifiers,such as URLs, wraps can be distributed to a specific individual orwidely to many either by including the wrap identifiers in messages(e.g., emails, texts, etc.), by posting in social media feeds (Facebook,Twitter, etc.), and/or embedding in online advertisements, etc. Thisattribute, meaning the ability to easily share and distribute wraps overalready pervasive communication channels, is likely to increase thepossibility of (i) wraps in general becoming ubiquitous in the mobileeconomy and (ii) individual wraps going “viral”.

Consumers now spend vast amounts of their time and consciousness ontheir mobile phones and tablets. As a result, the ability to easilydistribute wraps to mobile devices helps brands intimately deliverelegant, user experiences, precisely where it matters the most. Wrapsthus have the ability to transform mobile devices into powerful businesstools. By delivering wraps to mobile devices, it helps brands sell moreand build recognition, relationships and loyalty among customers.

In most situations, all that is needed to view a wrap is a browser. Whena wrap is requested for viewing, a runtime viewer is provided along witha wrap descriptor. On the consuming device, the runtime viewer isarranged to de-serialize the cards of the wrap descriptor and togenerate a runtime instance of the wrap. In other situations, theruntime viewer may already be included in a native application residingon the consuming device.

Wraps are thus a groundbreaking, mobile-first, storytelling ande-commerce platform. By making it simple, inexpensive and easy to (i)author narrative wraps with interactive functionality and (ii) todistribute wraps like messages, wraps have the unique ability to:

(a) “democratize” the web by providing a powerful, low barrier, low costalternative to apps and web sites;

(b) unlock the vast story-telling potential of the Internet, and

(c) drive e-commerce by building customer relationships and increasingweb conversion rates via the interactive functionality provided inwraps.

Wraps thus solve many of the problems and limitations associated withthe existing methods for distributing content and conducting e-commerce,such as PDF files, web sites, dedicated apps, and the like. With allthese benefits, wraps have the potential of becoming ubiquitous,ushering in a new paradigm referred to herein as the “Narrative Web”.

A wrap descriptor is composed of a set of card descriptors, eachdefining a structure, layout and content of an associated card. The wrapdescriptor may also include various wrap level components, attributes,behavior declarations and/or metadata.

Wrap and/or card descriptors will often separate content from theirpresentation. In other words, descriptors with content of anyappreciable size will typically reference these asset(s), as opposed toincorporating them into the descriptor itself. With this approach, theruntime viewer is responsible for obtaining the external assets atruntime. Wraps are thus “lightweight”, meaning they are easier todownload and distribute over mobile and cellular networks, which tend tobe relatively low bandwidth.

Each card descriptor also commonly includes component descriptor(s)identifying the component(s) in the card and any behaviors or otherattributes associated with such component(s). Behaviors are oftendeclared rather than being explicitly defined within the descriptors.Thus, the runtime viewer is responsible for associating the behaviorsdeclared in the descriptor with their associated components in theruntime instance. In other embodiments, card behaviors can be authoredinline or otherwise associated with the cards.

During consumption of a wrap, the runtime viewer on the consuming deviceinitially generates an object graph from the wrap descriptor and thensubsequently generates a Document Object Model (“DOM”) from the objectgraph. The runtime viewer then cooperates with the browser on the deviceto generate a runtime instance of the wrap based on the DOM. Thistwo-step approach differs from how conventional web pages are usuallyprocessed and displayed. Typically, the browser on a consuming devicewill convert Hyper Text Markup Language (HTML) defining a web page intoa DOM, which is then used by the browser to directly display the webpage. There is no intermediate transformation step of converting a “raw”wrap descriptor into an object graph prior to the browser displayingcontent based on a DOM.

In addition, the runtime viewer creates a card list in the sequenceorder(s) from the wrap descriptor and provides navigation tools thatoperate in cooperation with the browser to facilitate transitioningbetween cards during consumption. In non-exclusive embodiments, theorder of the cards is implicit in the descriptor structure. Since thenavigation functionality is provided by the runtime viewer, the cardsthemselves do not have to include navigational constructs. That is,there is no need to provide explicit linking or navigation components inthe cards to facilitate normal navigation between adjacent cards in thewrap, which helps simplify card design. Since normal navigation ishandled by the runtime viewer in cooperation with the browser, the cardsonly require navigational constructs when the author desires to overridethe standard wrap navigational features. This allows wrap authors toconcentrate on creating the desired content and visual appearance oftheir wraps, without needing to worry about the platform dependentformatting or navigation requirements. In other embodiments, however,cards may include navigational constructs that operate either in placeof or in cooperation with the navigation tools provided by the runtimeviewer.

The navigation tools that are actually used for any particular wrapinstance can be device and/or platform dependent. For example, swipenavigation is preferably facilitated when the consuming device has atouch sensitive screen, as is popular in most mobile computing devicessuch as smartphones and tablet computers. Selectable GUI navigationbuttons (such as arrows, buttons, text-based swipe directions, etc.) mayalso be displayed on the screen to facilitate navigation between cards.In addition, non-touch screen based navigation may be facilitated whenthe consuming device has as a selection device (e.g., a mouse) and/or akeyboard or keypad where various keys (e.g., right, left, up and downarrow keys, etc.) may be used to navigate between cards.

In a non-exclusive embodiment, wrap packages are a mobile-firstmarketing and commerce platform that ideally provides a beautiful worldof storytelling in bite-size moments that get and hold attention. Inother embodiments, wrap packages can be used and distributed to otherplatforms, such a desktop computers or Smart TVs for example. Wrappackages, although highly suitable for mobile, are not limited only tomobile devices.

Wrap packages takes content combined with mobile app and websitefunctionality and makes them into an elegant card-based narrative thatis delivered in the browser as a sharable and savable message. Wrappackages thus provides an app-like user experience that is delivered asa live, interactive message from a cloud-based platform, using forexample, the Software as a Service (SaaS) model.

The uniqueness of wrap packages creates opportunities for business andother organizations alike to innovate and improve marketing efforts,customer support, and user experiences in ways previously not possible,because an enabling interface and platform did not exist. Wrap packagescan thus potentially define the next generation interactive webparadigm, particularly for mobile, although for desktop and other typesof devices as well.

By authoring wrap packages, businesses and other organizations cansimply and cheaply create, distribute, and manage storytelling mobileweb user experiences, app like functionality, all in the context of wrappackages delivered directly to consumers. Where businesses used to haveto build destinations (websites) or use monolithic systems (apps), theycan now provide consumers, particularly mobile device users, with a userexperience that delivers the content they want combined with acomplementary palette of functions and/or e-commerce related services.

Wrap packages are also platform and device independent. Wraps do nothave to be written for any specific platform, such as iOS or Android, orfor any specific device or class of devices (e.g. smart phones, tablets,desktops, etc.). On the contrary, a wrap package need be authored onceand it will run on almost any device, regardless of the operating systemor the type. This ubiquity, along with the ability to easily distributewrap packages similar to messages, is a powerful construct thatpotentially can make the use of wrap packages near universal.

Wrap packages thus solves a number of current problem with the mobileweb. Unlike web sites, wrap packages are easy to consume on mobiledevices and offer the opportunity to create compelling narratives anduser experiences. In addition, the ability to incorporate app-likefunctionality into wraps provides a multi-function app-like experience,without having to be in an app, download an app, or open several apps.

A wrap is a portable container of multimedia content, such as text,images, photos, audio, video and the like, and interactive servicesdesigned for ease of delivery, exchange, and consumption. It iscomprised of a collection of cards, which, from an end-user/consumerperspective, are atomic units of the aforementioned multimedia contentand interactive services.

The cards in a wrap have an explicit sequence so that, when taken as awhole, they are ideal for, but not necessarily limited to, creating anarrative story as the cards are browsed in the defined sequence. Themultimedia content and/or interactive services contained by any givencard can be determined entirely in advance or as late as the moment thewrap is consumed by the end-user.

Cards have a visual representation intended to evoke similarities totheir physical counterparts. They have a fixed portrait aspect ratiothat makes them ideally suited to current mobile computing devices aswell as easy to scale up to and arrange to fit other display formfactors, such as provided on laptop and desktop computers as well assmart TVs. The physical card metaphor can also extend to the interactivebehavior of cards in a wrap, as the user can use gestures that evoke the“flipping” of cards in a deck or bound booklet to navigate between them.

Cards, however, however can differ from their physical counter-parts inways that provide for unique presentations of content or theaforementioned interactive services. For example, a gallery cardprovides the ability to present an expanded amount of content in avertically stacked orientation such that the overall length (i.e., thenumber of cards in a horizontal sequence) of the wrap is not affected bythe amount of content in the wrap. This aids in navigation since theuser can flip to the previous or next card regardless of their currentposition in the gallery.

The app-like functionality and interactive features implemented withincards include, but are not limited to, for example the ability to openhyperlinks to additional content on the web, such as maps or a shoppingcart, which can be presented in a modal overlay called a cul-de-sac. Thecul-de-sac allows for interaction with a traditional flow of web contentwithout losing a viewer's position within the wrap. When the interactionis complete, the cul-de-sac is dismissed, returning the viewer to theoriginal card in which the cul-de-sac was initiated. Other services mayuse input from the user or a remote source to dynamically generate thecontent on a card. These are just a few illustrative examples of theapp-like functionality and interactivity that can be built into thecards of wrap packages.

The wrap package data structure definition, or schema, contains a uniqueidentifier and descriptive metadata for the wrap and contains a cardpackage for each card in the wrap. Similar to the wrap package, the cardpackage is an abstract, platform-independent data structure representingthe contents of a card, which is a composition of componentsrepresenting internal atomic units of content such as text or an imageor other nested containers of components. Components may also representcontent that is dynamically generated at the time of consumption, forexample, by fetching content from the Internet or by processing inputfrom the user.

Cards are thus like containers for holding and distributing mediacontent, such as text, images, photos, audio, video and the like. Inaddition, cards may also contain or hold executable objects that provideor enable real-time features, such as application functionality (i.e.,the ability to schedule appointments, engage in online chats orconversations) and support e-commerce related services (i.e., theability to purchase goods and/or services). Such media content andexecutable objects are sometimes referred to herein as card “assets.”Cards are also consumable anywhere, meaning they have the ability to beresolved and displayed on just about any type of device (mobile phones,laptops, tablets, wearable computing devices such as smart watches,desktop computers, smart TVs, etc.), regardless of the platform (e.g.,iOS, Android, Microsoft, etc.). In addition, cards are a navigationmetaphor. Each card can be authored to group related information thatcan be easily consumed within a user interface experience by swipe (orother simple gesture) navigation from card-to-card. Wrap packages thusrepresent a holistic, book like, narrative approach to presentinginformation and providing application and/or e-commerce related servicesto users and consumers, particularly those using mobile devices, such assmart phones and tablet computers.

In addition, each card in a wrap has defined content that is displayedin a predefined layout. In general, the cards in a wrap have the samesize and aspect ratio. The aspect ratio is preferably device independentand is preferably maintained regardless of device orientation and/ordisplay window size.

The cards of the wrap packages are ideally authored in one or morelinear sequences so that a book-like narrative unfolds, not only throughthe cards themselves, but also by the transition between the cards, asthey are sequentially browsed. In addition, the wrap packages areportable objects that may exist within a social data feed or within acustom application. Wrap packages are also readily distributed, similarto electronic messages, through e-mail, messaging, social-media, or viaa variety of other electronic communication platforms. As a result, wrappackages are consumable, sharable and savable objects. As the cards arebrowsed in the one or more linear sequences during consumption, the userexperiences the unfolding of the authored narrative, including thedefined media content interwoven with the complementary applicationfunctionality and/or e-commerce related services. As a result, theentire user experience including any application functionality and/ore-commerce related services is substantially contained within thecontext of the wrap package itself, often (but not necessarily) withoutthe need to navigate to other sites.

Referring to FIG. 1, a diagram of a non-exclusive embodiment of a wrappackage 10 viewable on a computing device 12 is illustrated. The wrappackage 10 includes a plurality of cards 14 that are threaded togetherso as to enable browsing by swiping in one or more linear sequences. Anyof the cards 14 may optionally include various types of media, such astext, images or photos, audio, video, a live or streaming feed of media,3-D objects, or content from other wrap packages (not illustrated). Anyof the cards 14 may also optionally provide application functionality,such as the ability to receive input data or display dynamicallygenerated data, a calendar for scheduling or booking appointments ormaking reservations for goods and/or services, location/GPS, etc. Inaddition, any of the cards 14 may optionally provide or supporte-commerce services, such as the ability to browse products in acatalog, communicate with an online sales representative, and/orpurchase product(s).

By way of example, in the schematically illustrated wrap package 10,card 14 _(A) includes text, card 14 _(B) presents a gallery, card 14_(C) includes images or pictures, card 14 _(D) includes a video, card 14_(E) includes e-commerce related service(s), card 14 _(F) includes acalendar function for scheduling appointments and/or bookingreservations, card 14 _(G) includes a user approval function, 14 _(n-1)includes a data entry function, card 14 _(N) includes location or GPSservices, etc.

On computing devices with touch sensitive screens, the cards 14 of wrappackages 10 can be navigated linearly by swiping or by using othersuitable interfaces, such as a stylus or pen. In devices without a touchsensitive screen, alternative user interfaces are provided to facilitatetransition (e.g., flipping) from one card to the next. In the context ofthe present application, the terms “swipe-browsing” or “swiping” isintended to mean the navigation from one card to an adjacent next card.With devices with touch sensitive screens, swipe browsing is typicallyimplemented by the sliding of a finger or other input device across thedisplay. With devices without touch-sensitive screens, other navigationtools such as a mouse, keyboard or remote control, can be used for swipebrowsing. When a swipe is performed, the content of the next card in thesequence is displayed. For example, by swiping either right to left orvice versa, the next card, depending on the swipe direction, in thehorizontal sequence is displayed. Similarly, by swiping up and/or down,the next card in either the up or down sequence is displayed. Thus, theuser experience when consuming a wrap package is the wrap package itself(as opposed to a remote web site for example), viewable via a swipe-ableinterface.

Additionally, some cards may also include one or more embedded link(s)that, when selected, enable navigation to either a non-adjacent card notin linear sequence or to another wrap package, a web page or some otherlocation entirely outside of the wrap package.

It should be noted that the particular layout of cards 14 in the wrappackage 10 illustrated in FIG. 1 is merely illustrative. Both the numberof rows and/or columns, and the number of sequential cards 14 within anygiven row or column, may vary widely as appropriate to deliver thedesired user experience, narrative, content, functionality and servicesof the wrap package 10.

With gallery cards, such as card 14 _(B) of FIG. 1, swiping allows forthe scrolling through of the contents of a card 14, which are typicallytoo voluminous to be displayed within the size of a fixed screendisplay, such as that provided on a mobile phone. In an illustrativeexample, a particular wrap package 10 may include a plurality of cardsorganized in a horizontal sequence. By swiping right to left or viceversa, the next card 14 or the previous card 14 in the horizontalsequence is displayed. In the vertical direction, however, one or moreselected cards 14 _(B) may be configured in the gallery format, allowingthe viewer to scroll up or down by swiping through media content of thegallery. In an illustrative but non-exclusive example, a wrap package 10authored and distributed by a car rental business may include ahorizontal sequence of cards 10, each dedicated to a category ofinformation pertinent to a traveler (i.e., cards dedicated to localhotels, restaurants, local tourist attractions respectively). By swipingup or down for a given card, relevant material within each category isdisplayed in a gallery format. For instance by swiping up or down thehotel card (not illustrated), a gallery of a number of local hotels isdisplayed. In variations of the gallery card format, the behaviorinvoked by an up or down swipe may differ. For example, swiping up ordown my result in a continuous “rolling” of the content of the gallerycard. In other embodiments, an up or down swipe may result in a “snap”action with the next item of content appearing after the snap, forexample, as illustrated as cards 14Y and 14Z in FIG. 1.

The wrap package 10 is identified, as described in more detail below,through the use of a unique identifier (wrap ID 42) assigned to thepackage 10. By way of example, the wrap ID 42 may take the form of aUniform Resource Identifier (URL). As such, the wrap ID may thus beprovided as a link, which can readily be used to effectively send orretrieve the wrap package. That is, the wrap package may effectively be“sent” to a potential viewer as a link using any of the wide variety ofmechanism that can currently—or in the future—be used to send a link orconvey the URL. By way of example, this may include e-mail messages,text messages, SMS messages, via a Twitter tweet, as a post on socialmedia such as Facebook, etc., discussion forums, walls or the like, as alink embedded in a document, an image, or a web page or any other mediatype, in a blog or microblog (e.g. Tumblr), or any other messaging orelectronic content distribution mechanism or communication platformcurrently known or developed in the future.

Wrap packages are therefore significantly different and more powerfulthan web sites. For example with wrap packages, they can be consumed “onthe spot” where it is located (i.e., when delivered to a mobile devicefor example). In contrast with the selection of a banner ad appearingwithin a web site, where the viewer is taken to a new web page that isnot (a) necessarily designed for mobile devices and (b) is selfnavigating, making it very difficult for a narrative to be conveyed. Asa result, the user experience, particularly on mobile devices, may bevery poor. Hence, the friction of providing a compelling user experiencewith wrap packages is far less than with web site.

The cards 14 of a wrap 10 can be displayed on the screen of virtuallyany type of computing device. It should be appreciated that the cardmetaphor is particularly well suited for use on mobile devices such assmart phones, tablet computers, etc., which makes the formatparticularly powerful for authors interested in developing contenttailored for mobile devices. By delivering wrap packages 10 to mobiledevices, users and potential customers can be won over at their point ofintimacy, where they spend their time and consciousness. Wrap packagesthus allow authors, merchants and other content providers to createcompelling narratives and provide ongoing application functionalityand/or e-commerce support directly delivered anytime and anywhere tousers, transforming their mobile devices into a powerful business toolthat enhances mobile engagement and relationships. As a result, highercustomer satisfaction, better brand engagement, and a higher conversion(i.e., click-through rates) and repeat e-commerce related activitycompared to other forms of after sale promotions and merchandising willlikely result.

Referring to FIG. 2, a diagram depicting the design, functionality anddata integration capabilities of a representative card 14 in a wrappackage 10 is shown.

By using card templates, authoring tools and media collaboration tools,beautiful, content-rich, cards 14 may be created either by automation orby individuals with even minimal design skills and experience. As such,the author, either a person or an automated process, has the ability toeasily create beautiful content-rich cards 14 that can selectivelyinclude text, images, photos, and other media similar to PDF files, butoptionally, with the added benefit of additional applicationfunctionality and/or e-commerce related services, either embedded in thesame card 14, or other cards 14, in the wrap package 10. In theautomated authoring embodiments, the content of a card 14 can bepopulated by a data processing system that automatically uploadspredefined content into various defined fields of a card template.

By authoring (i) the horizontal and/or vertical sequence order forswipe-browsing the cards 14, (ii) the media content in each card 14,(iii) application functionality and/or (iv) the e-commerce services foreach card 14, it is possible to author wrap packages 10 that arecontent-rich, highly interactive, and that define a palette of services,functions and experiences related to the wrap package 10, all within thecontext of a story book-like narrative that unfolds as the cards 14 arebrowsed in their sequence order(s).

In addition, the use of component libraries and the authoring toolsallow for the authoring of cards 14 with a diverse, easy to use,reusable, set of component modules that provide a wide variety ofapplication functions and e-commerce services. Such applicationfunctions include, but are not limited to, for example, calendarfunctions, scheduling of an appointment functions, reserving or bookinggoods and/or services, such as a car rental, hotel room, or table at arestaurant, map or GPS related functions, support for onlineconversations, streaming live video or other media feeds, etc. Inaddition, e-commerce related services include displaying product and/orservice offerings, displaying user account information, engaging a salesrepresentative in an online chat session, and enabling the purchase ofgoods and/or services, etc. These card services or “plugins” are allpart of an ecosystem supported by a Wrap run-time engine viewer(described in more detail below), which allows the various plug-inservices to all communicate and inter-operate together. For example, acalendar plugin could be configured to communicate with a reservationbooking database plugin, which could communicate with a chat plugin. Thecommunication among the various plug-in services is accomplished througha common set of APIs. As a result, the interactivity, functionality andusefulness of wrap packages 10 are significantly enhanced by such anecosystem of connected plug-in services.

Finally, the integration capabilities of cards 14 enable thebi-directional flow of data from users browsing a wrap package 10 toother cards 14 in the same wrap package 10, to another wrap package 10,or a remote data processing system. For example, a card 14 can beintegrated with the back end software system for a large onlineretailer, which will automatically populate the content of a card 14with product images, user account information, prior purchaseinformation, and a host of other user-related information.Alternatively, a card 14 can be used to capture data input from a userand provide it to a retailer's back end e-commerce software system. Forexample, a card 14 may display a one-click “Buy Now” function for adisplayed item. When the Buy Now function is selected, previously saveduser account information is automatically delivered to the back endsoftware system of the online merchant, which then processes theinformation to complete the transaction.

The data entered by the user and/or the data presented via a card 14 ofa wrap package 10 may thus be integrated with the back-end database,cloud computing services, web sites, etc., regardless if managed by anauthor and/or distributor of the wrap package or by a third party. Thedata processing for the purchase of goods and/or services, appointments,and/or other application functionality and e-commerce related servicesmay, therefore, be performed either within the wrap packages 10 itselfor integrated with a remote data processing resource.

The data integration capabilities of cards 14 can also be shared amongother cards 14 in the same wrap package 10, with other wrap packages,with web sites, or just about any other data processing system.

Referring to FIG. 3, a diagram summarizing the content and distributionmodel for wrap packages 10 is shown. As illustrated in the left mostcolumn, the content that may be included in the various cards 14 of awrap package 10 may include photos and/or images, audio, video, text,3-D objects, various types of streaming media (e.g., audio, video,audiovisual, data, biometric information, tickers, sensor outputs,etc.), other data types, application functionality and/or e-commerceservices. This content may further be combined with content mixed fromother wrap packages 10 as well as live or streaming content. The cards14 of the wrap package 10 may be further modified based on analytics,intelligent personalization based on the demographics of targeted usersor viewers, as well as the integration of either data input or dataoutput to/from with other cards 14, other wrap packages 10, or remotedata processing systems and processes, as explained above.

All of the above are then combined during the authoring process into agroup of digital objects, defined herein as the wrap package 10. Innon-exclusive embodiments where URLs are used as identifiers (i.e., wrapID 42), the wrap packages are “light-weight”, meaning content of thewrap package 10 is delivered over a network to a user only when the wrapID 42 for the wrap package 10 and/or each card 14 is identified. As aresult, the media content, application functionality, and/or e-commercerelated services is delivered only when needed. Also, by authoring thecards 14 using a widely supported language such as HTML, the cards 14 ofwrap packages 10 can be written once and are viewable on a displayassociated with almost any computing device running a browser.Accordingly, unlike applications, multiple version of a wrap package 10need not be authored for multiple platforms.

The wrap package 10 is thus essentially a cloud based portable objectthat may be readily distributed in a number of ways. In non-exclusiveexamples, wrap packages 10 may be distributed by email, SMS messaging,ad networks, Twitter, merchant/retailer web sites, photo and/or videosharing web sites that support messaging, social networking web sitesuch as Facebook, through the down-loading of applications fromaggregators such as the Apple App Store or Google Play, or just aboutany means for electronically distributing data over a network, currentlyknown or developed in the future.

Authoring and Distribution of Wrap Packages

Referring to FIG. 4, a block diagram of a non-exclusive system forauthoring, storing, distributing and consuming wrap packages 10 isillustrated. The system 20 includes a server node 22, a plurality ofcomputing devices 12, including but not limited to a desktop computer12A, a laptop computer 12B, a tablet computer 12C, a mobile “smart”phone 12D, a wearable computing device, such as a smart watch 12E orsmart glasses 12F and “smart” TVs 12G. The server node 22 and thecomputing devices 12A-12G communicate with one another over a network24. In various embodiments, the network 24 may be the Internet, anintranet, a wired or wireless network, a Wi-Fi network, a cellularnetwork, other types of communication networks, or any combinationthereof.

The server node 22 includes a “wrap” engine 26, which defines a webapplication framework 28, a storage device 30 and cache 32, each forstoring wrap packages 10 and other data. The server node 22 also mayinclude a suite of tools, such as an authoring tool, an analytic enginetool, a media collaboration tool and a data transformation tool, forauthoring wrap packages 10. Suitable authoring tools are described, forexample, in U.S. patent application Ser. Nos. 14/740,533 and 14/740,539,each filed Jun. 16, 2015, both of which are incorporated herein byreference.

The web application framework 28 is a software platform designed tosupport the manual and/or automated authoring of wrap packages 10. Theframework 28 is designed to alleviate the overhead associated withcommon activities performed during the authoring of many wrap packages10. For example, the framework 28 may include one or more libraries tohelp with the authoring of common tasks, and modularizes and promotesthe reuse of code designed to perform specific tasks, such asimplementing application functionality and/or supporting e-commerce. Invarious embodiments, the web application framework 28 may be implementedusing, but is not limited to, Ruby, Rails, JavaScript, Angular-JS,and/or any other language or framework currently known or developed andused in the future.

In a non-exclusive embodiment, the web application framework 28 of thewrap engine 26 also performs content management as a way of organizing,categorizing, and structuring the media and other content resources suchas text, images, documents, audio files, video files and modularizedsoftware code so that the content of wrap packages 10 can be stored,published, reused and edited with ease and flexibility. The contentmanagement function is also used to collect, manage, and publishcontent, storing it either as components or whole documents, whilemaintaining dynamic links between the components and/or cards 14 of awrap package 10.

In yet another non-exclusive embodiment, the web application framework28 of the wrap engine 26 is structured around multiple tiers, includingbut not limited to a client tier, an application tier and a databasetier. The client tier refers to the browser enabled communicationdevices 12 that execute and display cards 14 of wrap packages 10, aswell as web pages written in HTML or another mark-up language. Thedatabase tier, which is maintained in storage 30, contains the one ormore libraries of user and/or platform provided media content, softwarecomponents, modules, etc. used for the authoring of wrap packages 10.The application tier contains the software that runs on the server node22 and that retrieves and serves the appropriate wrap package 10 fromstorage 30 and/or cache 32 when requested by a computing device 12.

Since wrap packages 10 are essentially data objects, they can be bothcached and delivered over a Content Delivery Network Interconnection(CDN), both of which can be effectively used to deliver wrap packages 10with minimal delay. For example, commonly requested wrap packages 10 maybe cached in the cache 32, which provides faster access and deliverytimes than storage 30. Also other caching techniques, such aspre-caching, may be used with popular wrap packages 10, to speed updelivery times. Since the amount of storage in the cache is typicallylimited, cached wrap packages 10 and other data may be periodicallyreplaced by any known replacement algorithm, such as first-in, first-outor least recently used for example.

During the composing of a wrap package 10, one or more author(s) 34 mayaccess the server node 22 over a network 36, which may be different orthe same as network 24. The author(s) 36 interact with the wrap engine26, including the web application framework 28, and the above-mentionedsuite of tools for the creation, editing, optimization and storing ofwrap packages 10. In yet other embodiments, the one or more author(s) 34can also access third party content 38 for inclusion into a wrap package10. As previously noted, wrap packages 10 can be authored manually byone or more individuals or electronically in an automated process.

For more details on the authoring of cards 14 of wrap packages, see U.S.provisional applications 62/062,056 and 62/062,061, both entitled“Wrapped Packages of Cards for Conveying a Narrative With Media Content,Providing Application Functionality, and Engaging Users in E-commerce”,both filed Oct. 9, 2014, and both incorporated by reference herein forall purposes.

Once the authoring of a wrap package 10 is complete, it is maintained instorage 30 and possibly cached in cache 32. In response to receiving anidentifier, the wrap engine 26 fetches the corresponding wrap package 10from storage 30 or the cache 32 and serves it to the requestingcomputing device 12 for consumption in a format customized for theviewing device.

It should be noted that the authoring and distribution diagram of FIG. 4is merely representative and should not be construed as limiting. Forexample, multiple server nodes 22 for the authoring and/or distributionof wrap packages 10 may be provided at the same or different locations.In addition, multiple instantiations of a given wrap package 10 can bestored at multiple server nodes 22, typically located at differentgeographic locations. With this arrangement, the server node 22 that ismost capable of quickly delivering a requested wrap package 10,sometimes referred to as the “publication server”, is the node 22 thatwill deliver the wrap package to the requesting device 12.

The Wrap Package

As diagrammatically illustrated in FIG. 5A, a wrap package 10 includes aset of one or more cards 14. Each card 14 may contain one or morecomponents 16 that serve as containers for content objects 17. Thecontent objects 17, together with the behaviors associated with thecards and components 16, define the content and functionality of thecards. The content objects 17 may be simple or complex. Simple contentobjects 17 include standard web-based content types such as text,images, video clips, etc. More complex content objects 17 may includeobjects having more complicated structures and/or behaviors, as will bedescribed in more detail below.

The structure of the wrap 10, including the structure, layout andcomponents 16 of each of its cards 14 is preferably defined by a wrapdescriptor 40. The actual structure of the descriptor 40 may vary widelyand a few different suitable descriptor structures are described in moredetail below with respect to FIGS. 6-6F. In general, each descriptor 40has a number of descriptive elements that together define the structure,layout, components, behaviors and content of the wrap.

Some content objects 17, such as text, may be directly included(in-line) in the component 16. Other content objects 17, such as imagesor video clips, may be included by reference, e.g., through simple URLreferences, or in-line through an encoding method such as MIME(Multi-Purpose Internet Mail Extensions). Complex content objects 17 maybe specified in-line or by reference and may (a) contain othercomponents 16 or content objects 17 and/or (b) specify abstractbehaviors.

Referenced content objects 17 stored outside of the wrap descriptor 40are sometimes referred to herein as assets 65. The referenced assets 65may take the form of almost any type of content that can be included inthe wrap package. This can include text, photos, images, 3-D objects,audio, video, and other media content or streams and/or a variety ofexecutable objects, services and/or other functionality. Sometimes anasset may take the form of a stream and the wrap descriptor 40 isarranged to identify the source of the feed. By way of example, thestream could be a live audio or video stream, a data feed such as astock ticker, sensor outputs, biometric information, etc.

In certain circumstances, some or all of the assets 65 associated with awrap 10 may be stored and accessible from a dedicated wrap server.However, that is not a requirement. Rather, an asset can be retrievedfrom any location that would be accessible by the consuming device(e.g., through the Internet, an intranet or private network or any otherreliable means), and there is no need for the various assets 65 to belocated in a single asset store, although that may be desirable in manycircumstances.

The wrap package 10 has an associated identifier, the wrap ID 42, thatuniquely identifies the wrap 10. The wrap ID is preferably a globallyunique identifier (GUID). In some embodiments, the wrap ID 42 takes theform of a URL, or any other identifier that can be converted to, orextracted from, a URL, which facilitates access to the wrap 10 over theInternet using conventional mechanisms. An example of a conversion ofthe wrap ID to a URL might be adding a domain as a prefix to the wrap IDto form a URL (e.g., www.wrap.com/wrap/<wrapID>).

FIG. 5A also diagrammatically illustrates selected components associatedwith defining and rendering a representative wrap package 10. Theillustrated components may optionally include one or more covers 15, awrap descriptor 40, a wrap runtime viewer 50 and various referencedexternal assets 65. As previously noted, the wrap descriptor 40 definesthe structure, layout and components 16 of each of the cards 14 withinthe wrap package 10. The wrap descriptor 40 typically includes the wrapID 42 and a set, deck or array of card definitions or card descriptors46, each defining the structure of an associated card (as described withrespect to FIG. 6 for example). The wrap descriptor 40 may also includeother information of interest such as a wrap name/title 44 andoptionally one or more cover identifier(s) 43 and/or other informationor metadata 45 about the wrap package 10.

To facilitate rendering the wrap package 10 on various differentdevices, the wrap is preferably stored in a data format that separatesthe data from the presentation. At the time of this writing, JavaScriptObject Notation (JSON) is a popular, light-weight, data-interchangeformat that can be used to describe the wrap package 10. Thus, by way ofexample, the definition of the wrap package 10 may be stored as a JSONdata object at the server(s) 22. That is, the descriptor 40 may take theform of a JSON object. In other embodiments, a BSON (Binary JSON) dataobject may be used. Although the use of JSON or BSON data objects isdescribed, it should be appreciated that in other embodiments, the wrappackage 10 may be stored in a variety of other suitable formats, whethernow existing or later developed.

The optional cover 15 of the wrap package 10 is typically a graphicobject that contains an embedded hyperlink to the wrap (e.g., the URLused as wrap ID 42) and can be placed in any suitable type of electronicmedia to represent the wrap package 10. Thus, a wrap 10 may be accessedby clicking on or otherwise selecting the cover 15 or by clicking on, orotherwise selecting any other type of link containing the wrap ID 42. Assuch, in order to “distribute” a wrap package 10, either the cover 15 ora link can be distributed to potential viewers of the wrap package 10using any available tool. For example, the wrap package 10 may bedistributed by: (i) placing the cover 15 or a link on a webpage, in anad or in any other location that can be accessed by a potential viewervia a browser; (ii) by posting the cover 15 or a link on a blog, amicroblog, a forum, a wall etc. or any social media distributionmechanism such as Facebook, Twitter, etc.; (iii) by including the cover15 or a link in a message such as e-mail, SMS message, a Twitter Tweet,text messages, etc.; or (iv) using any other available distributionmechanism or platform, either known now or developed in the future.Therefore, in many circumstances, it is desirable to create a cover 15that is attractive and entices viewers to access the associated wrappackage 15. In some instances, the cover 15 may take the form of animage from the wrap package 10 itself (e.g., the first card), however,that is not a requirement.

The wrap package 10 is configured to be rendered on a consuming device12 in conjunction with a wrap runtime viewer 50, which is also sometimesreferred to as the wrap run-time engine or simply the viewer. Theruntime viewer 50 provides a set of tools and functionalities that arehelpful for viewing and/or interacting with the wrap. In somecircumstances, the viewer 50 will take the form of a dedicated, platformspecific, wrap viewer application (e.g., an applet or app in the contextof a mobile device), a plug-in (e.g. a browser plug-in) or othermechanism installed on the viewing device that provides the necessaryfunctionality. In other circumstances the wrap viewer functionality maybe incorporated into other types of applications. However, limiting therendering of wraps to devices which have preinstalled wrap viewingapplications/functionality would greatly reduce their portability sinceusers are not always motivated to install such applications unless oruntil they see a compelling need. Therefore, as will be explained inmore detail below, the delivery of a wrap packages 10 may optionally beaccompanied by a run-time viewer 50 that includes a set of associatedtools and functionalities suitable for use by a conventional browser togenerate and/or render the runtime instance of the wrap based on thewrap descriptor 40 and to facilitate user interaction with the wrappackage 10. These tools and functionality can be thought of, and areoften referred to herein as a wrap toolset that is part of the wrapruntime viewer 50. By providing the wrap construction, viewing andinteraction toolset in a browser executable form together with the wrapdescriptor 40, the wrap package 10 can be consumed on a wide variety ofdifferent devices and operating system platforms (e.g., iOS, Android,Microsoft, etc.) without requiring the users to download and install adevice and/or platform specific viewer application. This is a powerfulconstruct for enhancing the portability and viral distribution of wrappackages among a myriad of devices and operating system platforms

In the embodiment illustrated in FIG. 5A, the viewer toolset providedwith the wrap viewer 50 includes navigational tools 51, sharing tools52, storing tool 53, various e-commerce tools 54, presentationengine/tools 55, security and access control tools 56, a renderingengine 57, and application functionality tools 58. Of course, it shouldbe appreciated that not all of these tools are required in allimplementations and that in other implementations, a variety of othertools and functionalities may be provided as well. The navigationaltools 51 facilitate navigation within the wrap package 10. The sharingtools 52 provide mechanisms by which a consumer of the wrap 10 may sharethe wrap with others, e.g., by e-mail, by SMS message, via a socialmedia post, etc. Storing tool 53 allows a user to persistently store thewrap and/or when applicable, the wrap state, either locally or remotely.The e-commerce tools 54 may include a variety of functionalities thatcan help facilitate a variety of e-commerce tasks including purchasing,making reservations, etc. Application functionality tools 58 enable“app-like” functionality within the wrap package 10, such as conductingonline chats, GPS functionality, etc. Presentation engine 55 controlsthe presentation. In some embodiments, the presentation engine 55 may bearranged to present the wrap on the consuming device at a scale and inan aspect ratio that is at least somewhat optimized for the device.

Security and access control tools 56 provide security and access controlfunctionality, which might include encryption functionality and userauthentication services. For example, in some circumstances, thepublisher of a wrap may want to limit the circulation of the wrap tospecific users or groups of users. A few, nonexclusive examples of suchcircumstances include when the wrap is created for use as: (i) an activereceipt for a purchase as described in U.S. Provisional Application Nos.62/062,056 and 62/075,172 (both incorporated by reference herein for allpurposes) and (ii) a ticket for an event as described in U.S.Provisional Application No. 62/079,500; (also incorporated by referencedherein for all purposes) (iii) an item customized for a customer such asa travel itinerary; (iv) an employee manual as described in U.S.Provisional Application No. 62/114,731 (also incorporated by referenceherein for all purposes); etc. Encryption services may be desirable toprotect confidential information. Of course, there are a very widevariety of other circumstances where security and/or accesscontrol/permission functionality may be desired.

With certain embodiments, the viewer 50 may optionally also include arendering engine 57 arranged to create and/or render a runtime instanceof the wrap on a consuming device 12 based on the descriptor 40. In suchembodiments, the rendering engine is arrange to dynamically generate theHTML (or other markup language) use by a browser or other viewingmechanism on the device 12 to render the wrap at runtime. In someimplementations, the rendering engine 57 is arranged to create an objectgraph based on the descriptor 40 and a document object model (DOM) basedon the object graph. The browser or other suitable app or applicationmay then use the DOM to render the wrap package 10.

With yet other embodiments, the viewer 50 may also optionally have anynumber of card behaviors definitions 60. As will be described in moredetail below, different cards can be designed to exhibit a wide varietyof different behaviors. In order to simplify the card, and card templatecreation processes, various desired behaviors can be defined separatelyfrom the cards themselves. The behaviors are known to or accessible bythe wrap viewer 50 (e.g., desired behaviors may be defined throughbehavior definitions 60 or may be accessible as behavior extensions 62as seen in FIG. 5B). Thus, the descriptor for any particular card orcomponent may simply declare the desired behavior and the viewer 50 willknow how to impart such behavior to the wrap/card/component and/or howto obtain an extension that imparts such behavior.

In FIG. 5A, the behavior definitions and the various tools areillustrated as separate items to facilitate their description. However,in practice, some of the illustrated tools are simply sets of associatedbehaviors, and therefore, the illustrated distinction between thebehaviors and such tools is/are largely for emphasis.

As discussed above, the wrap package 10 may be rendered on a widevariety of different devices 12A through 12G. These devices may have awide variety of different screen sizes, capabilities, and viewingmechanisms. When a particular device 12 requests a wrap package 10, adetermination is effectively made as to whether a suitable wrap runtimeviewer is already present on the requesting device. If not, a browsercompatible runtime viewer 50 is provided in addition to the wrap or wrapdescriptor 40. The browser compatible run-time viewer may be written inany format that is appropriate for execution by a browser. By way ofexample, JavaScript (JS) is a dynamic programming language that iscurrently popular and supported by most general purpose browsers andmany other rendering mechanisms. Thus, JavaScript works well for thebrowser compatible viewer since the same wrap viewer can be used for awide variety of different browsers. However, it should be apparent thatin other embodiments, the wrap viewer 50 may be implemented using a widevariety of other now existing or future developed frameworks and/orlanguages. For example, the DOM rendering may be replaced with a Reactframework or another suitable framework currently known or developed inthe future. When the wrap viewer is incorporated into a nativeapplication, it will sometimes be desirable to write the viewer (orportions of the viewer) in a format that executes more efficiently or isotherwise preferred for execution on the underlying operating system,etc.

A specific wrap is illustrated in FIGS. 7A-7M. The illustrated wrap 310is an informational wrap about a particular product line—Hint® water.The wrap includes a deck of nine cards—i.e., cards 311-319. Card 311 isthe first card. Cards 312-315 are informational cards that describe theHint® water flavored products as illustrated in FIGS. 7B-7Erespectively. Card 316 is a gallery card that shows a number ofdifferent available flavored water non-carbonated products asillustrated FIGS. 7F-7H respectively. Card 317 is a second gallery cardthat shows a number of different available carbonated flavored waterproducts (Hint Fizz) as illustrated in FIGS. 71-7K respectively. Card318 is an e-commerce card that allows a user to order a monthlysubscription of Hint products as illustrated in FIG. 7L. Card 319 is thelast card and includes various tools that allow a user to share the wrapand/or comment on the wrap on various social media forums as illustratedin FIG. 7M.

The wrap 10 may be constructed in a variety of different formats. Aspreviously described, a descriptor 40 defining the wrap may beconstructed using JavaScript Object Notation—i.e., in the form of a JSONdata object. By way of example, a representative JSON descriptor thatdefines the wrap 310 shown in FIGS. 7A-7M is provided in Appendix I ofU.S. Provisional Patent Application No. 62/210,585, which isincorporated herein by reference.

Defining Card Behavior

Different cards 14 within a wrap 10 can be designed to exhibit a widevariety of different behaviors. To simplify the card authoring process,the card descriptor 46 within a wrap 10 can be arranged to declare thebehavior of the card 14 without internally defining that behavior.Rather, in such circumstances, the desired card 14 behaviors are definedwithin the wrap viewer 50 as part of the behavior definitions 60 orthrough behavior extensions 62. With this arrangement, a card templatedesigner can define the behavior for cards 14 authored using thetemplate, or can define a set of available behaviors from which a cardauthor can choose. If a set of behaviors are available to the cardauthor, then the authors selects the desired behavior from the availableset. In either case, the desired behavior is declared as part of thecard. With this arrangement, different cards 14 within a wrap 10 canexhibit different behaviors and such behavior remains with the card evenif the card is used in a different wrap. If a new card behavior isdesired, the new behavior can be created and added to the behaviordefinitions 60. In this manner, the newly defined behavior becomesavailable to other template designers and/or card authors.

To illustrate the concept of defining card behaviors, consider thegallery cards 316, 317 illustrated in FIGS. 7F-7K. Generally a gallerycard is arranged to display a number of items. The items are presentedin a vertically extending sequence that extends beyond the displayscreen of the expected viewing device. Thus, to view the items in thegallery, a user would vertically scroll through the array of items.Typically (although not necessarily), the items in the gallery all havesubstantially the same structure. By way of example, in the embodimentillustrated in FIG. 7, card 316 is a gallery card as illustrated inFIGS. 7F to 7H—which are screen shots of a set of gallery item panes,with each gallery item describing a different flavor of Hint®water—specifically, pomegranate 321, blackberry 322 and blood orange 323respectively. As can be seen, each item has a similar layout with animage 324 on the left being an image of the fruit that flavors thewater, and image 325 on the right being an image of the relevant waterbottle and a trigger 340 which identifies the product, indicates itcost, has a “Buy Now” graphic 327 and provides a mechanism that can beused to purchase the displayed item as will be discussed in more detailbelow.

It can be imagined that the designer of a gallery card may wish the cardto be scrolled in a variety of different ways. By way of example, oneapproach may be to conceptually divide the gallery card 316 into anumber of frames or “pages” 316(a), 316(b), 316(c) that have the visualappearance of being separate cards as seen in FIGS. 7F-7H. In such anarrangement, it may be desirable to have the displayed image snap to thenext adjacent page when a scroll command (e.g., a vertical swipegesture) is received. In another example, the items in the gallery maybe relatively smaller such that the displayed item does not take up theentire card display area. In such a circumstance it may be desirable tohave the displayed image snap to the next adjacent item when a scrollcommand is received. In still other circumstances, the card designer mayprefer to provide free (continuous) scrolling. Of course, other types ofscrolling behavior could be provided a well. In a non-exclusiveembodiment, a key 338 may be included for providing a visual indicatorof the relative up/down position that is being displayed relative to theoverall number of views of the gallery card.

As illustrated in FIG. 7F, the runtime viewer may optionally be arrangedto display a graphical hint element 339 (e.g. the “swipe” graphic) onthe first pane of a gallery card to help convey to the user that thecard may be navigated vertically to view additional gallery items. Ofcourse, the visual appearance, text (if any), size and/or displaylocation of the hint element 339 may be widely varied. Additionally, therules regarding when such hints are used may be widely varied. Forexample, in some implementations the hint can be provided on the firstframe of a gallery card only the first time that the gallery card isdisplayed. In another example, the hint can be displayed each time thegallery card is displayed.

The card descriptor 46 for the gallery card includes a behaviordeclaration that identifies the desired behavior for the card which canthen be bound to the card at run-time by the wrap viewer (e.g., browserbased viewer, native viewer, etc.). For example, this could take theform of a statement such as:

-   -   “Behaviors”: [“vertical-snap-to-card”]        Further examples are shown in Appendix I of incorporated U.S.        Provisional Patent Application No. 62/210,585.

The developer of the wrap viewer 50 can define any number of cardbehaviors that are supported by the viewer, such as but not limited tothe different scrolling techniques in the example above. Third partiescan provide extensions that define still other behaviors (e.g., ascrolling behavior in which a two finger swipe reacts differently than aone finger swipe, etc.). The developer of a card template can definewhich of the available behaviors are available for use with the template(e.g., a subset, or all of the defined scrolling behaviors). Wrap andcard authors using the template can then select which of the behaviorsavailable to the template they would like to associate with the card,and the chosen behavior is declared as part of the card descriptor 46.

Although the specific example of scrolling behavior in a gallery cardhas been given, it should be appreciated that virtually any desired typeof card behavior can be defined and declared in a similar manner. Itshould be appreciated that differences in card behavior may take a widevariety of different forms. For example, different types of cards mayhave different accompanying behaviors; the behavior of a particular typeof card may be different based on its position within the wrap 10;and/or the animations associated with transitions may vary with respectto card position.

Returning to the wrap 310 of FIGS. 7A-7M, several different cardbehavior(s) can be implemented. For instance, the first card in asequence (e.g., card 311) may be arranged to facilitate a transition tothe second card (e.g., card 312) by swiping to the left—but a swipe tothe right may have no effect. The transition may be animated, as forexample, by an animation that resembles flipping the first card in amanner that resembles turning the page of a physical book. The finalcard in the deck (e.g., card 319) may be arranged to facilitate atransition back to the second to the last card (e.g. card 318) byswiping to the right, whereas a swipe to the left may cause an animationthat starts looking like a page turn but snaps back to indicate that theend of the wrap has been reached. Intermediate cards may be arranged tofacilitate transitioning to the next page in response to a left swipeand transitioning to the right in response to the preceding page inresponse to a right swipe.

As previously suggested, the gallery cards 316, 317 may also beresponsive to vertical swipes to facilitate scrolling through thegallery, whereas various other cards which do not have associatedgalleries may not be responsive to vertical swipes. In some embodiments,a left swipe from any of the gallery card items or “pages” (e.g.,316(a), 316(b), 316(c)) transitions to the same next card 317. However,in other embodiments, the gallery card behavior can be set such that thenext page that the sequence transitions to varies based on the currentlydisplayed gallery item or page. Of course, a wide variety of other cardbehaviors can be defined and implemented using the same behaviordefinition approach.

The actual structure of the descriptor used to define a gallery card mayvary significantly. By way of a representative card descriptor structuresuitable for implementing a gallery card is described in more detailbelow and is illustrated in FIG. 6C.

Triggers

A card can have one or more triggers embedded therein. Triggers arehooks associated with displayed items that can cause an action orbehavior in response to an event (e.g. a user input). That is, apredetermined user action or other event (such as the selection of thedisplayed item) triggers a defined action. In general, a trigger is acomponent 16 of a card. The trigger has associated behaviors and one ormore associated handlers. When a triggering event is detected, theassociated handler causes execution of the desired behavior.

Virtually any type of computer detectable event can be used to activatea trigger. In many circumstances, the triggering event may be a userinput such as the selection of a displayed trigger component (e.g., bytapping or performing another appropriate gesture relative to adisplayed item configured as a trigger component). However, in othercircumstance, the activating event may be system generated. Systemgenerated events can include sensor input based events, time or timerbased events, the receipt of a particular message, the determinationthat a particular navigational sequence has occurred within a wrap,geo-location or proximity based events (e.g., the viewing device islocated within a particular store or geographic area, or near to otherusers viewing the same wrap) or any of a wide variety of other computerdetectable events.

Once activated, a trigger may exhibit any desired behavior which can beassociated with the trigger through appropriate behavior declarations95. Virtually any type of computer implementable behavior can beassociated with a trigger. By way of example, a linking trigger may beused to link the user to another card within the current wrap, to sendthe user to another wrap, webpage or other destination. The linkingtrigger may also be arranged to define a desired linking behavior (e.g.,open in same tab, open in new tab, etc.). Other triggers may initiate awide variety of other action.

The ability to generally define triggering events and the resultingbehaviors is an extremely versatile construct that provides wraps withtremendous flexibility and power. Thus, triggers can be used to enable awide variety of actions, including invoking of a number of differentapplication-like functionalities or e-commerce related services. Forexample, a trigger may be used to initiate an action (e.g., order aproduct, conduct an online chat, sharing the wrap with others, book orreserve a table at a restaurant, a hotel room, a rental car, etc.).Almost any type of wrap component/asset can be associated with atrigger, which gives authors tremendous flexibility in guiding the userexperience.

The wrap 310 illustrated in FIG. 7 has a number of triggers. Theseinclude purchasing trigger 340 (FIGS. 7F-7K), subscription trigger 360(FIG. 7L) and social media triggers 381, 382, 383 (FIG. 7M). Thepurchasing trigger 340 is arranged to facilitate a user purchase of thedisplayed product. As an illustrative example, the trigger 340 of FIG.7F, is associated with a generally rectangular region that bounds thetext and graphic located at the bottom of the card, including the text“pomegranate $18 for 12 16-ounce bottles” and the adjacent “Buy Now”button. The region that involves the trigger is generally shown by adashed box in FIG. 7F. Selection of the trigger 340 links the user to amechanism that facilitates the purchase of the identified item. Theother above-identified triggers in the wrap 310 are characterized by andoperate in a manner similar to the Buy Now trigger 340 of FIG. 7F.

The implementation of a purchase mechanism within a wrap package 10 maybe widely varied. For example, in some implementations, the user may belinked to the vendor's website, where the purchase may be made in aconventional manner through the website. If this approach is taken, itis often desirable to access the target website through a “Cul-de-sac”so that the user is returned to the wrap when finished with anytransactions they wish to make (a Cul-de-sac has the property ofreturning to the initiating wrap card/page when the user closes thetarget website). In another approach, the selection of the triggercauses the wrap to transition to a purchasing card (or sequence ofcards) within the same wrap where the desired transaction can occur. Onesuch approach is described below with respect to FIGS. 8A-8C.Alternatively, the transition could be to a separate purchasing wrap.Regardless of the mechanism, it is often desirable (although notnecessary) to use a cul-de-sac approach so that the user is returned tothe card from which the transaction was initiated after the transactionis completed. In still other implementations, the transaction can becompleted without leaving the current card—particularly when the user isusing a secure viewer that knows the user's identity and relevantpurchase related information. In such an embodiment, the transaction canbe completed using a “one-click” purchasing option, where previouslystored customer billing, shipping and other account information is usedto process the purchase.

In a non-exclusive embodiment, the specific behavior associated with thelink may be declared in the same manner described above. For example,consider a situation where the trigger activates a link to an externalwebsite. There are several ways that such a link could be implemented.One approach might be to link to the target web page in the currentlyactive browser tab, which has the effect of navigating away from thewrap. A second approach might be to open a new browser tab and open thetarget webpage in that new browser tab. A third approach might be toinitiate a Cul-de-sac in the current browser tab and open the targetwebpage in the Cul-de-sac (a Cul-de-sac has the property of returning tothe initiating wrap card/page when the user closes the target website).In such an arrangement, the card template developer can make these threelink behaviors available to the trigger and the card author can selectthe desired behavior. The card developer can also define a default linkbehavior selection in the event that the card author does notaffirmatively make a selection. As can be seen in Appendix I ofincorporated U.S. Provisional Patent Application No. 62/210,585, trigger340 in card 316 has these three possible linking behaviors in responseto activation of a trigger.

The ability to direct a user to a target website to complete atransaction can be helpful in many scenarios. However, a drawback isthat it can be more difficult to track or guide user behavior after theuser has navigated away from the wrap. Therefore, it is often preferableto design the wrap in a manner that facilitates handling user sideinteractions involved with a transaction from within the wrap itself.

The actual structure of the descriptor used to define a trigger may varysignificantly. By way of example, a representative trigger componentdescriptor structure is described in more detail below and isillustrated in FIG. 6D.

Wrap Descriptors

Referring next to FIGS. 6-6F, a variety of specific descriptorstructures suitable for use in defining various wraps, cards and/orcomponents will be described. Although specific descriptor structuresare illustrated, it should be appreciated that the structure of thevarious descriptors can be widely varied. In general, the descriptorsare arranged to define the structure, layout, content and behaviors ofthe wrap without details of its presentation on a particular device.That is, the descriptors capture the functional and behavioral intent ofthe author, in a platform independent way, such that the runtime mayimplement the described structures and behaviors in a way optimal forthe platform in question.

A wrap generally will include multiple cards and the corresponding wrapdescriptor will typically have discrete descriptors for each of thecards. The card descriptors each include a unique card identifier anddefine the structure, behavior, layout and content of the correspondingcard. Behaviors associated with any particular card can be applied atthe card level (i.e., associated with the card as a whole), at acomponent level (i.e., associated to a particular component alone—whichmay or may not include subcomponents) or at any subcomponent level.Since the card descriptors are discrete, self-contained, units with aunique identifier, it is very easy to mix wraps (i.e., use cards createdfor one wrap in a second wrap). When cards are mixed, their componentsand associated behaviors remain the same—although it is possible todefine behaviors that are context or state aware and therefore exhibitdifferent states/properties/responses/etc. in different circumstances.

The components are encapsulated units that may have defined content(although such content may be dynamic) and, when desired, specificdefined behaviors, styles and/or other attributes. In some preferredembodiments, each component has a unique identifier and may optionallyalso have an associated type and/or name. The use of encapsulatedcomponents with unique component identifiers makes the components highlymodular such that an authoring tool can readily use and reuse the samecomponents in different cards and/or wraps. Behaviors can be associatedwith the component and any component can be composed of one or moresubcomponents which themselves are fully defined components.

Regardless of the level to which they are applied (i.e., wrap level,card level, component level, subcomponent level, etc.), the behaviorsare preferably declared in the descriptor rather than being explicitlydefined within the descriptor. In that way, the behavior declarationacts as a hook which can be used to associate virtually any programmablelogic with a card/component/etc. The behaviors are preferably defined(or at least obtainable) by the runtime viewer.

FIG. 6, diagrammatically illustrates the structure of a firstrepresentative wrap descriptor 40. In the illustrated embodiment, thewrap descriptor 40 includes the wrap ID 42, the wrap title 44, and acard descriptor 46 for each of the cards 14. Each card descriptor 46describes of the structure, layout and content of the associated card.The wrap descriptor 40 may also optionally include cover identifier(s)43 and/or any other desired information or metadata 45 relevant to thewrap. The cover identifier(s) 43 identify any cover(s) 15 associatedwith the wrap. Other information and metadata 45 may include any otherinformation that is deemed relevant to the wrap, as for example, anindication of the creation date and/or version number of the wrap,attributions to the author(s) or publisher(s) of the wrap, etc.

The card descriptors 46 may be arranged in an array, deck, or in anyother suitable format. In the diagrammatically illustrated embodiment,each card descriptor 46 includes: a unique card identifier (card ID 71);a card layout 75; and optionally, an associated card type 73. The cardlayout 75 preferably includes at least one of a layout identifier(layout ID 76) and a layout definition 78 and optionally, a layout name77. When the layout definition is not explicitly provided in the carddescriptor 46, it may be obtained by reference through the layout ID 76.The layout definition 78 may be provided in a variety of differentformat. By way of example, Cascading Style Sheets (CSS) works well. Aswill be appreciated by those familiar with the art, CSS is a style sheetlanguage used for describing the look and formatting of a document. Ofcourse, in alternative embodiments, other style sheets and/or other nowexisting or future developed constructs may be used to define the layoutof the cards.

The card ID 71 is preferably a unique identifier that uniquelyidentifies the associated card 14. An advantage of using uniqueidentifiers as card IDs 71 is that the cards 14 are not wed to aparticular wrap package 10, but rather, can to be used in or sharedamong a plurality of wrap packages. That is, once a card is created itcan be used in any number of different wraps by simply placing thatcard's descriptor 46 at the appropriate locations in the card decks ofthe desired wrap package. Thus, the unique card IDs 71 can be used tohelp streamline the process of using one or more cards 14 from one wrappackage 10 in a second wrap (sometimes referred to as the “mixing” ofcards 14 and/or wrap packages 10), which can help simplify the processof creating the second wrap package. In some implementations, the cardIDs 71 may also take the form of URLs, although this is not arequirement. A potential advantage of using URLs as the card IDs 71 isthat the URLs can potentially be used to allow a card in the middle ofthe wrap to be more directly accessed from outside of the wrap.

The card layout 75 defines the layout of the components 16 of theassociated card 14. Preferably the card layout 75 includes a card layoutID 76 which uniquely identifies the associated layout. In someembodiments, the descriptor itself defines the layout using aconventional web presentation definition mechanism such as CascadingStyle Sheets (CSS). In other embodiments, the layout definition may beaccessed from a server using the layout ID 76. As will be familiar tothose skilled in the art, CSS is a style sheet language used fordescribing the look and formatting of a document written in a markuplanguage. CSS enables separation of document content from the documentpresentation, including elements such as the layout, colors and fonts.Thus, CSS is very well adapted for inclusion within the wrap descriptor40 itself.

It should be noted that the layout ID 76 is also useful in the contextof the aforementioned authoring tool used to create and author wrappackages 10. Specifically, in some embodiments, the authoring tool isprovided with a number of pre-defined templates (card layouts) fromwhich an author of a new card can choose. Each template has one or morecontainers/components 16, which are arranged on the card in apredetermined manner for holding card content 17. The template itselfcan have any particular layout, or can be used to create a particularlayout. In either case, the particular layout can be assigned a uniquelayout ID 76, and thereafter, be used and reused in conjunction withdifferent cards thereby simplifying the card creation process.

The card type 73 (which is optional in the descriptor) relates primarilyto such an authoring tool. For convenience, the templates may becategorized into different groups or classes. By way of example, theclasses/groups may relate to their intended uses, the entity for whichthe templates are to be used, to the creator of the templates or anyother logical grouping of templates. For example, card type 73, can beassigned to one or more predefined card templates, depending on theirintended function. For instance, an authoring tool may include one ormore card templates, each centric for the display of text, visual mediasuch as photos or images, the playing of video, live or streaming media,application functionality (e.g., scheduling appointments, GPS, etc.), orsupporting e-commerce (e.g., displaying products and/or services forpurchases, chatting with online sales representative, etc.)respectively. Thus for each template type and class/grouping, card typeID 73 may be assigned.

With the template-based approach, the author(s) of a wrap package 10 caneasily select a desired template/card layout that meets their need froma set of available templates and create a new card by readily insertingthe desired content, functionality and/or services into the predefinedcontainers. Such a template based approach can greatly simplify theauthoring of cards 14 and wrap packages 10, since the author(s) need notbe an expert in HTML, scripting or other typical web page languageconstructs required in order to create the card(s) 14 as typicallyrequired with creating conventional web pages. Rather, those details areembodied in the selected template itself, which translates to a specificlayout 75, which in turn is identified by the layout ID 76. When arun-time instance of the wrap package 10 is created, layout 75 is usedto format the associated card 14.

The associations between components 16 and their contained contentobjects 17, whether explicit in the card descriptors, or implicit andanonymous, are sometimes referred to herein as “pins” 80. When explicit,pins 80 are identified in the card descriptors 46 by a universallyunique Pin ID 81, and by a symbolic pin name 82. When implicit, pins areanonymous at runtime, but may at design time be instantiated in order toprovide operable constructs to the authoring tools, in which case theywill share the name and ID of the component they bind and associate.

Whether implicit or explicit, these conditions are equivalent, and onerepresentation may be trivially transformed into the other and viceversa, with no loss of meaning. The runtime, authoring environment andother tools are free to transform the object graph as they see fit, andwhether the association is treated as intrinsic or extrinsic isirrelevant for the purposes of the determination of the structure of thewrap and its contents, this transformation being a matter ofconvenience.

The symbolic name of a pin (pin name 82) or component is both Human andMachine-Readable, for example, “Headline”, “Glyph”, “Body”, “Image”,“Video”, “Cul-de-sac”, or any other heading that the template designerdeems appropriate. The symbolic name is used to identify its function;can be used and bound to by constraints and layouts to further constraintheir display, behavior and function; and is used by the authoring toolsto identify the role of the thus-associated component and map fieldsfrom one layout to another when changing the layout associated with acard. Multiple pins or components can share the same symbolic name. Whenthey do, it implies that they serve the same role in the system, andthat the same rules will apply to them.

Components 16 contain there associated content 17 and may also containor reference zero or more attributes or constraint objects, specifyingmetadata to manage or modify the display of, or behavior of, thatcomponent. Constraint objects may specify abstract symbolic data used bythe runtime to determine how to display or manage the object containingit, (the Constrained Object,) or the behavior of that object. Examplesof such abstract symbolic data are CSS class names, behavior names, orother symbolic names acted on by other objects in the system.Constraints may also contain concrete specifications to modify thedisplay or behavior of the object, or its container or any containedobjects. An example of the former is containing CSS rules applied to thecontent. An example of the latter is inclusion inline or by reference ofJavaScript code that acts on the constrained object.

The various constraint objects may be thought of as attributes thatdefine the style, format, behaviors, source/feed, and/or constraintsassociated the corresponding content 17. In the illustrated embodiment,these attributes 86 include style attributes 93, source attributes 87and other constraint objects such as behaviors 60, 62. Of course, otherattributes of a component can be defined and declared as appropriate forthe associated content.

The style attributes associate various styles with the content 17 andmay take the form of style sheets (e.g. CSS) or other conventional styledefinition mechanisms. By way of example, if the content 17 is a textstring, the style attributes 93 may include features such as the font,size, case, color, justification, etc. of the text. If the content is aglyph, the style attributes may include the color of the glyph, thesize, etc.

The source attributes 87 indicate the source of the associated content17. In some circumstances, the source attribute may simply be areference or pointer (e.g. a URL) that identifies the location of astatic content object (e.g., an image, a photo, a video, etc.). However,it should be appreciated that the content can also be dynamic. Forexample, the content object associated with a component of a wrap couldbe the current price of a particular stock. In such a case, the sourceattribute identifies the feed from which the current price will beretrieved when the card is rendered.

The ability to incorporate content from feeds into a wrap is a powerfulconstruct that facilitates a wide variety of different functionalitiesincluding streaming media and/or the dynamic updating of informationpresented in a wrap after the wrap has been rendered. In general, a feedis a structured source. As will be appreciated by those familiar withthe art, there are a wide variety of different types of feeds anddifferent feed structures. For example, a web feed is a data format forproviding users with frequently updated content. When desirable, webfeeds may be structured to provided content that can be dynamicallyupdated after the wrap has been rendered. Some web feeds are server sideevent driven as is commonly used to facilitate live updates—as forexample, sports score updates, stock price updates, etc. Other web feedsare polling feeds in which the wrap periodically polls a source. Anothertype of feed is a streaming feed. For example, a live streaming feed maypresent a live stream that is progressively rendered as the stream isreceived. Examples of live streams include live video streams, audiostreams, biometric streams, stock ticker streams.

It is anticipated that in some circumstance, it may be desirable totransform the feed source on the server side, specifically for thepurpose of better consumption by the wrap runtime, in the context of thewrap package in which it is to be presented. In such circumstances,specific middleware may transform external sources in order to preparethem for this consumption.

The source attribute 87 may take the form a feed descriptor that definesthe nature and structure of the feed as well as its feed characteristicsincluding source location, data format(s), update semantics, etc. Forexample, some feeds (e.g. live feeds and live update feeds) require thata socket be opened and kept open as long as the feed is active. Pollingfeeds require the identification of the desired polling frequency. Thisand other metadata addressing the update semantics of the feed may becontained in the feed descriptor, and inform the runtime of the desiredupdate behavior. In other embodiments, the source attribute may includea reference to a data feed object (not shown) that defines the datafeed.

It should be appreciated that there are a very wide variety of differenttypes of information/content that a wrap author may desire have updateddynamically while a wrap is being displayed. These might include itemsthat may be expected to update frequently and others that may updatevery slowly. By way of example, a few examples of items that may bedesirable to update dynamically include sports scores, stock prices, thenumber of tickets still available for purchase for an event, number ofunits of a product that are available or simply an indication of whethera product is in our out of stock, breaking news headlines, etc. A numberof services can also benefit from the ability to dynamically updatecontent based on information that can change while a wrap is displayedsuch as, the user's geographic location, social networking groupinformation (e.g. friends or peers that are nearby, online, etc.),featured information, etc. For example, a card in a wrap for a sportsstadium could show the nearest concession stands, restrooms, etc. whichcan vary as the user roams around the stadium. Another card could showthe stats of a baseball player currently at bat. A social networkingcard may inform a user when their friends or others sharing similarinterests are nearby. A retailer may wish to run special offers thatupdate periodically. Of course, these are just a few examples, and thetypes of content that a wrap author may wish to be able to updatedynamically is only limited by the creativity of the author.

Other constraint objects may include declarations of specific behaviorsthat are intended to be associated with the component 16 and/or content17. Such behaviors may include behaviors 60, 62 known to or accessibleby the runtime viewer 50 as discussed above.

FIG. 6A diagrammatically illustrates an alternative pin based carddescriptor structure 46A. Appendix II of incorporated U.S. ProvisionalPatent Application No. 62/210,585 illustrates a representative wrapdescriptor 40A that takes the form of a JSON object that utilizes thepin based card descriptor structure 46A illustrated in FIG. 6A. FIGS.27A-27E illustrate the wrap defined by the wrap descriptor of thereferenced Appendix II. To facilitate correlation between the Appendixand FIG. 6A, various descriptor elements are labeled with correspondingreference numbers in that Appendix II.

In the embodiment of FIG. 6A, the card descriptor 46 includes a uniquecard ID, 71, a card name 72, card type 73 and a card layout 75. Thelayout 75 includes a layout ID 76, optionally a layout name 77 and anexplicit layout definition 78. In the illustrated embodiment, the layoutdefinition takes the form of style sheets (e.g., cascading style sheets(CSS)). Although the illustrated embodiment includes both the layout ID76 and an explicit layout definition 78, it should be appreciated thateither could be eliminated from the descriptor if desired. For example,if the explicit layout definition is not part of the descriptorstructure, it could be accessed through the use of the layout ID.Alternatively, when the layout definition 78 is explicitly provided, theexplicit use of the layout ID 76 may be eliminated. However, it isgenerally preferable to explicitly provide the layout ID.

The descriptor 46A also includes an array of zero or more pins 80, witheach pin 80 corresponding to a first level component 16. Each pin 80includes a pin ID 81, a pin name 82 and an associated component 16. Thecomponent 16 includes a component ID 88, a component type 89, and thecomponent content 17. As indicated above, the content may be providedin-line or by reference. Any desired attributes and behaviors may thenbe associated with the component through a set of zero or more componentattributes 86 which potentially include any desired component styleclass declarations 91, component style sheets (CSS) 93 and componentbehavior declarations 95. In the illustrated embodiment, the style classdeclarations 91 refer and bind to CSS classes defined in the layoutdefinition 78 that are used to define the format of the associatedcomponent 16. Numerous examples of this binding can be seen in theAppendix II of incorporated U.S. Provisional Patent Application No.62/210,585. By way of example, the first pin 80(1) in Appendix II has anassociated component style class declaration 91(1) that refers to andbinds the font size style “font size-x1” 96 defined in layout 78 to theassociated text content 17(1).

Component style sheets 93 provide an alternative component levelmechanism for associating specific styles and formatting with acomponent 16. In general, it is expected that the card layout definition78 will define the styles and formats associated with each component ina robust manner that is satisfactory to the card author. In suchimplementations, there is no need to include any component level stylesheets 93, and it is expected that in many (indeed most) such cardimplementations, no component style sheets would be provided. Rather,the associated styles may be bound through the use of class declarations91. However, the component style sheets 93 provide a mechanism by whichthe style assigned to the component by the layout definition 78 may beoverwritten, which gives card authors great flexibility in defining thestylistic presentation of their content without altering the card layoutdefinition. In other implantations, it may be desirable to define someof the style attributes at the component level rather than the cardlevel. In such implementations more aggressive use of component levelstyle sheet 93 would be expected. In still other embodiments, theavailability of component level style sheets can be eliminatedaltogether. In the illustrated embodiment, style sheet are used toassign styles to the components since they are currently a popularformat for associating different styles with HTML content. However, itshould be appreciated that other now existing or later developedconstructs can readily be used to associate styles with the content asappropriate.

Behaviors 60, 62 can be associated with a component on the componentlevel in the same manner as the style sheets. This can be accomplished,for example, through the use of behavior declarations 95 which declarespecific behaviors 60, 62 with their associated component. It should beappreciated that the ability to associate specific behaviors withspecific components in a general manner provides tremendous flexibilityin the card creation process that facilitates the creation of cardshaving an incredibly wide range of functionality and behaviors whilemaintaining a simple, compact, and highly portable wrap structure. Eventhough there is an ability to associate behaviors with specificcomponents, it is expected that the behavior set may be null for manycomponents because they would have no need to have any specificbehaviors associated therewith.

The card descriptor 46A also associates any desired card levelattributes and/or behaviors with the card through a set of zero or moreattributes 86C that are associated with the card at the card level. Likethe component attributes 86, the card attributes 86C potentially includeany desired card level style class declarations 91C, card level stylesheets 93C and/or card level behavior declarations 95C which work insubstantially the same way as the component attributes, except that theyoperate at the card level. When desired, the wrap descriptor 40 can alsohave similar wrap level attributes 86W. Similarly, when the content of acomponent includes one or more subcomponent(s), the varioussubcomponent(s) may have their own associated component attributes 86regardless of the tier of the component/subcomponent. Still further,when desired, attributes can be associated with groups of components.

FIG. 6B diagrammatically illustrates an alternative card descriptorstructure 46B that does not utilize pins 80. The structure of carddescriptor 46B is generally similar to the structure of card descriptor46A described above with respect to FIG. 6A except for the use of pins.Therefore, the attributes (e.g., styles and behaviors) are associatedwith their corresponding components 16 rather than with pins 80. Like inthe embodiment of FIG. 6A, the card descriptor 46B includes a card ID71, a card name 72 and a layout 75. The layout 75 includes a layout ID76, layout name 77 and layout definition 78. The descriptor thenincludes an array of zero to many components 16.

Each component 16 includes a component ID 88, a component name 84, acomponent type 89, the associated content 17 and the associatedattributes 86. Like in the previously described embodiment, theassociated attributes may include associated classes 91, component stylesheets or definitions 93, behavior declarations 95 and/or theirassociated behaviors 60, 62. Thus it can be seen that card descriptors46B are functionally substantially equivalent to the card descriptors46A described above.

Appendix III of incorporated U.S. Provisional Patent Application No.62/210,585, illustrates a representative wrap descriptor 40B that takesthe form of a JSON object that utilizes the component based carddescriptor structure 46B illustrated in FIG. 6B. This descriptor definesthe same wrap illustrated in FIGS. 27A-27E and is generally equivalentto the wrap descriptor of Appendix II of incorporated U.S. ProvisionalPatent Application No. 62/210,585. To facilitate correlation betweenAppendix III and FIG. 6B, various descriptor elements are labeled withcorresponding reference numbers in the Appendix. It is noted that theattributes container 86 is labeled “Styles” in the JSON code of AppendixIII.

Although only a few particular card descriptor structures have beendescribed, it should be appreciated that equivalent functionality can beobtained using a wide variety of different descriptor arrangements.

Gallery Card Descriptors

FIG. 6C illustrates a representative gallery card descriptor 46G. Theillustrated embodiment uses the component based descriptor approach ofFIG. 6B although it should be appreciated that other card descriptorhierarchies (such as those illustrated in FIGS. 6 and 6A can be used aswell. Gallery card descriptor 46G includes card ID 71G, card name 72G(in this case “Gallery Card”), and card layout 75G with layout ID 76G,layout name 77G and CSS layout definitions 78G, which together define alayout suitable for a gallery card. The initial component is gallerycomponent 16G, which has a component ID 88G, a component name 84G, acomponent type 89G, gallery component content 17G, and any associatedattributes 86G (including class declarations 91G, style sheets 93G andbehavior declarations 95G).

In the illustrated embodiment, both the component name 84G and thecomponent type 89G are “Gallery.” The “content” of the gallery component16G is a set of one or more gallery item components 116. Each of thegallery item components 116 typically, although not necessarily, has thesame component structure previously described and can be thought of assubcomponents. This introduces a powerful feature of the describedarchitecture. That is, the “content” of any particular component may beone or more “subcomponents”. Similarly, the content of any of these“subcomponents” may also include one or more next tier components and soon, with the components at each tier having the same generic structure.Thus, each gallery item component 116 includes: a component ID 88, whichmay be thought of as a gallery item ID; a component name 84, a componenttype 89, content and any associate attributes 86 (potentially includingclass declarations 91, style sheets 93 and behavior declarations 95).

In the illustrated embodiment, the component name 84 and component type89 for the gallery item 116 is “Gallery Item”. The content of thegallery item 116 is a set of components (subcomponents) that make up thegallery item (that is, gallery items 116, which are subcomponents of thegallery component 16G, themselves have subcomponents which might bethought of as third tier components). Each of these gallery itemcomponents has the same structure as any other component. By way ofexample, the gallery item components may include a headline component16H, and an image component 16I (shown in Appendix III of incorporatedU.S. Provisional Patent Application No. 62/210,585). Only the headlinecomponent 16H is shown in FIG. 6C, but the content of a representativeheadline component 16H and image component 16I may be seen in galleryitems 116(1)-116(3) shown in FIGS. 27B-27D and the corresponding JSONdescriptor is shown and labeled in Appendix III.

With the described structure, specific behaviors or styles can beassociated with components at any level. Thus, for example, a behaviorcan be associated at the card level, the gallery item level, thecomponent of a gallery item level or at any other level at whichcomponents are used. An example of a card level behavior might be theaforementioned gallery card “snap to item” behavior 60C, which can beseen in the Appendices I, II and III. An example of a gallery itemsubcomponent level behavior might be a trigger as described below.

Although a particular gallery card descriptor structure has beendescribed, it should be appreciated that equivalent functionality can beobtained using a wide variety of different descriptor arrangements.

Trigger Descriptors

Referring next to FIG. 6D a descriptor structure for a representativetrigger component will be described. Like other components, the triggercomponent 16T includes an optional trigger component ID 88T, a componenttype 89T, a component name 84T, content 17T and any associatedattributes 86T (including any class declarations 91T, style sheets 93Tand behavior declarations 95T). In the illustrated embodiment, thecomponent type 89T is labeled “trigger” and the component name 84T islabeled “transact” indicating that the trigger is a transaction trigger.

The content 17T of the trigger component 16T in this illustrativeexample includes three subcomponents. The subcomponents include a textbox 16T′, an image 16TI that takes the form of a “buy button” and a link16L. An example of such a trigger 340 can be seen in FIG. 7F wherein thecontent of the text box 321 is “pomegranate $18 for 12 16-ouncebottles”, the content of the image is the buy button 327 and the link isa link to an external e-commerce site where a purchase transaction mayoccur. The link 16L has an associated behavior “open-in-new-tab”, whichcauses the browser to open the target URL in a new tab when the triggeris activated by tapping on a touch sensitive display anywhere within theregion defined by the trigger or by otherwise activating the trigger.The described link trigger behavior is a good example of a componentlevel behavior.

In the illustrated embodiment, the link component 16L is a first levelcomponent of the trigger and therefore the link is activated by tappingon (or otherwise selecting) any component within the trigger—as forexample either the text box 321 or the buy button 327. If the cardcreator preferred to have the link activated only by selection of thebuy button 327, that can readily be accomplished by making the link acomponent of the buy button rather than a first level component of thetrigger—or, by moving the text box component definition out of thetrigger—as for example to the same component level as the triggeritself. Any tap or click in the bounding rectangle of the trigger, asdefined by the components contained by the trigger, results in thetrigger being activated.

It should be apparent that the trigger component may be included as afirst tier component in the card descriptor or as a subcomponent at anylevel within the card descriptor hierarchy. Although a particulartrigger descriptor structure is illustrated, it should be appreciatedthat equivalent functionality can be obtained using a variety ofdifferent descriptor arrangements. It should further that FIG. 6D isillustrative for providing an example for the purchase of an item forsale. It should be understood, however, the cards can be authored withtriggers for a wide variety of actions besides purchasing an item, suchas the reservation or booking of goods and/or services, online chats,GPS related services and functionality, etc.

Feed Descriptors

As indicated above, there are a wide variety of different types of feedsand feed structures that may be desirable to incorporate into anyparticular wrap. To facilitate the use of feeds, any wrap descriptor 40or individual card descriptor 46 may include one or more feeddescriptors 187. Each feed descriptor 187 has a number of descriptiveelements that together define an associated feed in a manner that can beused by the runtime to integrate information from the feed into arendered wrap instance in the manner desired by the wrap author.

Referring next to FIG. 6E, a representative feed descriptor 187 inaccordance with a nonexclusive embodiment will be described. In theillustrated embodiment, the descriptive elements of feed descriptor 187include a feed type 105, a feed source 107, a desired lifecycle 109, afeed target 111, an update frequency indicator 113 and any required feedparameters 115. Of course, not all of these descriptive elements arerequired in every feed descriptors and any particular feed descriptormay include one or more additional descriptive elements as appropriate.The feed descriptor 187 may also optionally include a feed ID 103 and/ora feed name 104.

The feed type 105 indicates the type of the associated feed. In general,most feeds can be categorized into categories or “types” that sharesimilar traits and/or requirements. As previously discussed, some of thefeed types might include “live” (server side event driven) feeds,polling feeds, streaming video feeds, streaming audio feeds, etc. Whenthe feed descriptor is processed by the runtime, the feed type can beused to help identify the resources that may be required to support thefeed. For example live streaming feeds and server side event drivenfeeds may require the opening of a socket for the feed and keeping thesocket open for the duration of the defined feed lifecycle 109.

As will be appreciated by those familiar with the art, most web feed areformatted using either RSS or Atom and the runtime can be configured tohandle either of these web feed formats or any other desired feedformat. Typically, it is not necessary to specifically identify the feedformat in the descriptor, however, we desired, a feed format field (notshown) can be added to the descriptor or the feed format can be dictatedby the feed type.

The feed source 107 indicates the location from which the feed can beobtained. Often, the feed source 107 takes the form of a URL, althoughother endpoints or source identifiers may be used in alternativeembodiments.

The lifecycle 109 indicates the feed's lifecycle semantics. That is,when and how the feed in activated, the conditions under which itremains active and potentially, when it is closed. For example, a fewpotential lifecycles might include: (a) “while-card-visible” which opensthe feed when that associated card is displayed and keeps the feedactive as long as the associated card is the visible card within thewrap; (b) “always” which opens the feed when the associate wrap isrendered and keeps the feed active as long as the wrap is displayed; (c)“on-card-open”—which activates a feed any time the wrap transitions tothe associated card; (d) “on-wrap-load” which opens the feed when thewrap is loaded; (e) “on-user-selection” which opens and/or updates thefeed in response to a user input (e.g., the selection of a displayedbutton or other user activated trigger). Some of the lifecycles, such as“while-card-visible” and “always” may be more appropriate for live andstreaming feeds, or feeds that affect globally-visible wrap state (e.g.in a globally visible sports score ticker or stock ticker) whereasothers, such as “on-card-open” or “on-wrap-load” may be more appropriatefor polling feeds. Which type of feed is most appropriate is highlycontext-dependent, and will be determined by wrap authors.

The semantics of feed lifecycle management when a feed is no longeractive may also vary widely based on what is appropriate for aparticular feed. To illustrate this point, consider a feed that isactive “while-card-visible.” When the user navigates away from therelevant card, the feed becomes “inactive” and there are severaldifferent feed handling approaches that can be utilized at that stage.For example, in some circumstances, it may be desirable to simply closethe feed and the associated connection when the user navigates away fromthe relevant card. Thereafter, if the user navigates back to the card, anew feed/connection is opened—with or without retained knowledge of whatwas previously downloaded. In other circumstances, it may be desirableto continue to accumulate any updates associated with the feed at theserver while the feed is “inactive”, and to forward such updates to thewrap in a batch if, and when, the user returns to the associated card.In such circumstances, the connection associated with the feed might bekept open while the user continues to navigate within the wrap, andthus, the connection would only be closed when the wrap itself is closedor the feed times out. Although only a few “inactive” feed managementapproaches have been explicitly described herein, it should beappreciated that a wide variety of other mid-life and end of life feedmanagement techniques can be used as appropriate for any particularimplementation.

Feeds may also remain active in order to collect events, and to initiatealerts related to those events. For example, in a chat session, it maybe desirable for a wrap may indicate that there was activity on anothercard, based on an incoming chat message, and in some cases not force theuser back to that card. In other cases the wrap author may choose tocause the user to be brought back to a chat card when a new messagecomes in. Moreover, a feed may be manually initiated or terminated, e.g.in the case of a user chat session, when the user chooses to initiate orterminate a chat session, perhaps with a customer service person, oranother user.

The target 111 indicates the callback endpoint for the feed—which may bethe method to call when an event happens. In many implementations, thetarget will be a container within the wrap that the feed is to beassociated with. In many circumstances, the intended container will bethe component or other structure (e.g., card/wrap) within which the feeddescriptor 187 is defined within the wrap descriptor 40. That is, whenthe feed descriptor 187 is included as part of a particular componentdefinition, it might be assumed that the feed is intended to be bound tothat particular component. Alternatively, if the feed descriptor 187 isincluded as part of a card descriptor 46 outside of any of theassociated component descriptions, it might be assumed that the feed isintended to be bound to the associated card. Still further, if the feeddescriptor is included as a part of a wrap descriptor 40 outside of anyof the associated card descriptors 46, it might be assumed that the feedin intended to be bound to the wrap as opposed to any particular card orcomponent.

However, in other situations, it may be desirable to bind a feed to anendpoint or containing structure that is different than the structurewithin which the feed descriptor appears within the wrap descriptor. Forexample, in some circumstances it may be desirable to overlay the feedcontent over all of the cards or a subset of the cards within a wrap. Insuch a circumstance, it may be desirable to associate the feeddescriptor with the overlay or the wrap rather than a particular card orcard component. At the same time, the feed may be defined as part of aparticular card, or as part of a particular component of a particularcard. As such, although the feed is defined (via the feed descriptor187) as part of a particular card/card component, it may be desirable toassociate the feed with an endpoint other than the card/component. Thetarget field 111 provides a simple mechanism that provides greatflexibility in allowing a card author to associate a feed with anysuitable structure within the wrap without forcing a rigid feeddescriptor authoring syntax, while the default behaviors make it easierfor the author to build more standard feed behaviors.

In embodiments, in which the target 111 is not explicitly defined, thedefault target may optionally be set to the container associated withthe structure within which the feed descriptor appears in the wrapdescriptor 46. Alternatively, the default target could be the containingcard, wrap or other level container. In still other embodiments, theexplicit target definitions can be eliminated and all targets can beimplicitly defined by the location of the feed descriptor 187 within thewrap descriptor. Although such an arrangement can work well, it shouldbe appreciated that it lacks some of the flexibility provided bysupporting explicit target definitions.

When explicit, the target can be identified relatively, by reference orthrough the use of explicit identifiers. By way of example, in aparticular embodiment, representative targets include: “container”—whichrefers to the container associated with the structure within which thefeed descriptor 187 appears; “parent”—which refers to the parent of thestructure within which the feed descriptor 187 appears; “card”—whichrefers to the card within which the feed descriptor 187 appears;“warp”—which refers to the wrap within which the feed descriptor 187appears; “grandparent”, etc. It is noted that when a relative term suchas “parent” is used, the level of the containing structure will bedependent on context. For example, when “parent” is used in the contextof a subcomponent, the “parent” would be the containing component.However, when the term “parent” is used in the context of a first levelcomponent, the term “parent” would refer to the containing card, etc. Itshould be noted that the same target can be identified by multiplemethods: relative references, absolute references, and defaultreferences being the primary embodiments.

The frequency 113 is particularly relevant to polling feeds andindicates how often the feed should be polled. In some circumstances itwill only be desirable to poll the feed once—e.g., when the associatedcard is opened, which can be uniquely defined by the combination ofLifecycle: on-card-open and Frequency: once. In other circumstances itmay be desirable to periodically poll the feed, as for example, everyminute, every 15 seconds, every 5 minutes, etc. In still othercircumstances it may be desirable to poll when the card or wrap is firstopened and thereafter only poll in response to user inputs or otherevents, as for example in response to the user selection of an “update”button (not shown). Of course, a very wide variety of other update rulescan be defined through the use of different frequency and lifecycleconstraints, and the feed may itself update the polling frequency forsubsequent reads, over the life of the interaction.

Some feeds may require the passing of specific parameters to the serverthat may be used by the server for various control, tracking orauthentication or other purposes. Feed parameters 115 can be used topass such parameters to the feed server. In the illustrated embodiment,the feed parameters take the form of name/value pairs although otherdata structures can be used in other embodiments. In some circumstances,the feed parameters 115 may be static and explicitly included in thewrap descriptor. For example, if a card employing a feed is associatedwith a particular ad campaign, it may be desirable to identify the adcampaign through the use of campaign identifier passed a feed parameter.In other circumstances the feed parameters may be variables. Forexample, a card arranged to provide current MLB scores sports may useteam identifier parameters to identify the teams of interest to theuser, with the user being given the ability to select the teams ofinterest—as for example through the selection of one or more teams ofinterest through a menu provided on the card. Of course the specificparameters that are appropriate for any given feed and the manner inwhich the parameters are obtained may vary widely and will often dependin large part on the APIs associated with the feed.

As described in more detail below, a feed engine 540 in the runtimeviewer has a set of rules that know how to access and bind the feedappropriately based on the descriptor information. Thus, the runtimeviewer can readily access the feed source and deliver the content to theappropriate container when the associated card/wrap is rendered based onthis descriptor information.

The actual contents of any particular feed descriptor can varysignificantly based on the nature of the feed and its intended usewithin the wrap. For example, a representative, nonexclusive, pollingfeed descriptor 187 a may have the following structure:

Feed: (187a) Type: polling (105) Source:https://feed.wrap.com/macys/catalog-spring_15 (107) Lifecycle:on-card-open (109) Target: container (111) Frequency: once (113)

In this embodiment, the feed descriptor 187 a defines a “polling” feedas indicated by “polling” feed type 105. The feed is queried once eachtime the card is opened as indicated by frequency indicator 113 andlifecycle 109 respectively. The source 107 of the feed as well as thetarget container 111 are also provided. In this example the target is“container” which refers to the structure within which the feeddescriptor 187 appears. Of course, the feed descriptor may alsooptionally include a feed ID 103 and/or a feed name 104, in addition toany feed-specific parameters.

In another example, a representative, nonexclusive, server side eventdriven feed descriptor 187(b) may have the following structure:

Feed: (187b) Type: live (105) Source:https://live-feed.wrap.com/mlb/scores (107) Lifecycle:while-card-visible (109) Target: container (111) Parameters: (115)Teams: [SFG, NYM] (116)

In this embodiment, the feed descriptor 187 b defines a “live” serverside event driven feed as indicated by “live” feed type 105. The feed isactivated any time that the card is visible so that updates can bedisplayed as they are received. The runtime feed engine 540 knows toopen a connection with the server when the associated card is displayedand to keep it open as long as the card is visible based on the feedengine rules associated with “live” feed types 105 and the declared“while-card-visible” lifecycle 109. The source 107 of the feed as wellas the target container 111 are indicated in the same manner as thepreviously described polling feed 187 a. The card associated with theillustrated feed is designed to provide current scores for MLB baseballgames. The feed is arranged such that the specific teams to be followedcan be identified in feed parameters 115 (i.e., Team parameters 116)sent to the server. In the illustrated example, two teams, the SanFrancisco Giants and the New York Mets are indicated. As such, the feedwill only provide updates on games involving at least one of thoseteams. In the illustration above, the team parameters 116 arespecifically identified in the descriptor. For cards that are associatedwith one or more specific teams, it may be desirable to include explicitteam parameters 116 in the descriptor. However, in other instances, theassociated card may include a selector interface that allows users toselect which games they are interested in following. In such a case, theteam parameter in the descriptor might specify that selector, might be anull or default field that can be filled and/or overridden by userselection, or other structure as appropriate.

One of the application functionalities that is supported by the wrapruntime is chat services. Thus, chat functionality can readily beintegrated into the any wrap. Chats typically require the use of a feedwhich can be defined in the same manner as other feeds. The feed used ina chat session can take the form of a live feed, a polling feed, or anyother available feed structure. The feed structure that is mostappropriate for any particular chat will depend in large part on thenature of the communications that are expected. In implementations wherecommunications are expected relatively continuous, a live feed may bemost appropriate. In implementations where communications are expectedto be relatively infrequent, a polling feed with an appropriate pollinginterval may be more appropriate. The specific chat feed structure mayvary with the design intent of the chat tool provider. By way ofexample, a representative, nonexclusive, chat feed descriptor 187(c) mayhave the following structure:

Chat: (187c) Type: Customer Service (105) Source:https://chat.wrap.com/macys/customer_service (107) Lifecycle:open-on-user-selection (109) Target: chat-overlay (111) Frequency: every30 seconds (113) Parameters: (115) User Name: [$user_name] (116) AccountNo.: [Account-#]

In this embodiment, the feed type is customer service 105 which is apolling type feed with the update frequency 113 is “every 30 seconds.”In the frequency example, ‘every’ is a keyword indicating a pollinginterval, 30 is a parameter indicating the number of units, and‘seconds’ indicates the units applied to the unit parameter. There are anumber of other chat types that may be appropriate, but way of example,“group” chat which may involve multiple participants, “single user”which may be a point to point chat, etc.

The lifecycle 109 is defined as “open-on-user-selection” which indicatesthat the feed is activated directly or indirectly by user selection asopposed to automatically when the wrap is renders or an associated cardus displayed. Any suitable gesture can be used to activate the feed—asfor example, by a user tapping or clicking on a “Chat Now” button(thereby activating a trigger that in turn launches the chat session).Some chat sessions may require or request certain information toinitiate the session. When some (or all) of the required information isknown at the time the wrap is authored, the appropriateinformation/values can be included in the feed descriptor parameters115. For example, in the illustrated embodiment, a user name and anaccount number is desired (if available). Although user specificinformation would not be known at the time the wrap is authored,variables can be provided in the descriptor, (e.g. $user_name,) asplaceholders, (e.g. [Account #]), or be incorporated dynamically fromsession state information, user cookies, or other available stateinformation.

User specific information such as user name, account number (inillustrated embodiment a Macy's account number) may be storedpersistently at any appropriate location, as for example in a statedescriptor, the runtime viewer, a cookie associated with the runtimeviewer, etc. The runtime viewer 51 can then look up the informationcorresponding to the declared variables appropriately at runtime—e.g.,when the wrap is rendered, when the chat session is launched or at anyother time that is deemed appropriate. In some circumstances, therequested information may not b available to the wrap. If the requestedinformation is optional, then the chat session can be initiated withoutthat information. If required, the user may be prompted to input therequested information.

Widgets

Application functionality can be incorporated into a wrap in a widevariety of different manners. In some wraps, behaviors are integrateddirectly into one or more card to instill desired wrap functionality.Another construct that the wrap runtime supports to facilitate theintegration of different functionalities into a wrap is the componenttype “widget.” Conceptually a widget component creates an internal framewithin the associated card (e.g. an HTML iframe) and points to anexternal source that supplies the content for the internal frame. Thewidget component typically contains a URL that points to the source(e.g., a server associated with the widget) and may specify any numberof parameters to be passed to the server that may be helpful to theserver in determining the specific content that is appropriate to supplyto the internal frame. When a widget component is loaded by the runtime,the runtime creates an internal frame within the associated card andobtains the contents to populate the internal frame from the identifiedsource. Thus, the content rendered within the internal frame associatedwith the widget is dictated by a source/server that is external to thewrap runtime rather than by the wrap descriptor itself. By using widgetcomponents, third parties can introduce any desired content orfunctionality into a wrap.

In a specific example, the internal frame may take the form of an HTMLiframe which is a well established HTML construct that facilitatesembedding a document inside another document. The iframe effectivelycreates a blank frame within the associated card that can be populatedwith content supplied by a server associated with the widget. Thecontent may be provided in HTML format which allows standard browsers torender the content within the frame. The HTML may include any desiredscripts (e.g. JavaScript) to provide the widget with desired behaviors.HTML iframes work particularly well because HTML is currently the defacto standard markup language used to create web pages and is thereforesupported by virtually all state of the art web browsers and is familiarto most web designers. Although HTML iframes are used in the specificexample, it should be appreciated that in other embodiments, theinternal frames may be constructed using other structures and/or may behave their content delivered in a variety of different now existing orlater developed formats, markup languages, etc.

To incorporate a widget into a card, a widget component descriptor 118is included in the associated card descriptor 46. A representativewidget descriptor architecture is illustrated in FIG. 6F. In theillustrated embodiment, the widget descriptor 118 includes a componenttype 89W (which in this case is type “widget”), a component ID 88W, anoptional component name 84W, and a widget definition 120. The widgetdefinition 120 includes a widget ID 121, a widget name 122 and adefinition 124 which is labeled “schema” in FIG. 6F. The definition 124includes a source identifier 126 that identifies the location of theserver that will supply the widget content and parameter(s) 130 thatrepresent parameter(s) to be passed to the server when the widget isinstantiated. The widget definition 120 also preferably includes framesize and position related identifiers such as width 127, height 128 andposition 129. The width 127 and height 128 identify the internal frame'sintended height and width, while the position 129 identifies itsposition within the card—e.g., the X-Y coordinates of its origin. Itshould be appreciated that the actual dimensions of the displayed cardsmay vary with the size of the screen upon which the wrap is displayed.Therefore, the various size parameters may be relative rather thanabsolute (e.g., 10%, etc.) Of course, in alternative embodiments, thedimensions and location of the internal frame can be defined in othermanners. As with all components, the widget may also have associatedattributes 86 (e.g., styles, behaviors, etc.).

The nature of the parameters 130 that are included in any particularwidget descriptor will vary widely with the nature of the widget itselfand the information that the widget developer deems important to thewidget content server. If the widget content is static and the framesize is known to the server, there may be no need to include anyparameters in the widget descriptor. However, it is expected that moreoften, it will be desirable to provide some additional types ofinformation to the server as part of the content request. For example,in some circumstances the parameters might include one or moreparameters that indicate the originating source of a request such as theassociated wrap, card or widget component identifier(s); a user orsystem ID; the geographic location of the user, etc. Other parametersmight be variables that provide information about the user (e.g. userdemographic information), the current wrap viewing state, and/orinformation inputted or selected by the user, etc. Such information maybe available from a variety of different sources, as for example: (i) acookie associated with the wrap; (ii) the runtime viewer, (iii) a wrapstate descriptor associated with the wrap and user, etc. Still otherparameters may convey information that is particularly relevant to thewidget. For example a Pinterest widget may identify specific pins,hosts, boards or tags of interest for the particular Pinterest card; ashopping cart widget may convey information identifying the user'sidentity, account number, shipping/billing address, items selected forpurchase, credit card information, etc. It should be appreciated thatthese are just examples and that the parameters may be configured toprovide whatever information is relevant to the specific widget.

In the embodiment illustrated in FIG. 6F, the widget definition includesa unique widget ID 121 that is distinct from the component ID 88W. Thewidget ID is optional, but can be useful to identify a widget class orobject that is used to create the component. This is particularly usefulfrom an object oriented programming and tracking standpoint in that aparticular class/object may be utilized in multiple different widgetsand the use of a widget ID allows the base class to be explicitlyidentified within the widget descriptor.

The content and functionality provided by a widget is only limited bythe imagination of the widget author. By way of example: a Twitterwidget can be configured to render a Twitter feed and facilitate Twitterservices; a chat widget can be configured to provide a chat service; acountdown widget can be configured to provide a timer-likefunctionality; a live sports score widget can be configured to displaysports scores in real time; a receipt widget can be configured tointeract with a company's backend financial systems to provide purchasereceipts; a purchase transaction widget can be configured to facilitatepurchase transactions; cul-de-sacs can be implemented using a cul-de-sacwidget; a stock widget can be configured to display stock prices and/orsupport trades etc. The specific parameters that may be useful for eachof these widgets may vary dramatically with both the widget's purposeand its particular implementation.

A representative JSON card descriptor 46 that includes a widgetdescriptor 118 is provided in Appendix IV of incorporated U.S.Provisional Patent Application No. 62/210,585. The corresponding card716 is shown in FIG. 26. The widget in the illustrated card is a DateCountdown widget. That is, it provides a counter 791 arranged to showthe time remaining until a specified date/time. In the illustrated card716, the specified event is the Dreamforce conference and the countdowncounter 791 is arranged to display the time remaining until theconference begins. For clarity, some of the components in Appendix IVare labeled with reference numbers corresponding to the Figures.

The widget descriptor 118 illustrated in the Appendix IV begins at page6 of the Appendix and includes a component type 89W (i.e. type widget),a component Id 88W, a component name 84 (i.e., “widget”) and a number ofattributes 86 (labeled “styles” in the Appendix IV). The widgetdefinition 120 appears on page 8 of the Appendix IV. As seen therein,the widget definition includes a widget ID 121; a widget name 122 (i.e.,Date Countdown); a definition (schema) 124 that includes the frame width127, frame height 128, source identifier (i.e., iframeUrl:) 126 and aset of three parameters 130. The illustrated parameters include the enddate 131 (i.e., the date/time that is being counted down to), anoptional message 132 and a time zone 133. The time zone 133 indicatesthe time zone associated with the end date/time. The message 132 isother information to be transmitted to the wedge server. Theseparameters are used by the widget server to help determine the specificcontent to be loaded into the iframe reserved for the widget in card716.

In another particular example, a representative, nonexclusive, widgetdescriptor suitable for presenting a Pinterest pin may have thefollowing structure:

Component Type: Widget (89W) Component ID: <UUID> (88W) ComponentAttributes: (86W) Widget Type: ID: <UUID> (121) Name: Pinterest Widget(122) Schema: (124) iframeURL:https://pinterest.com/wrap_widget_server/(126) width: # (127) height: #(128) Parameters: (130) PinID: <pin #1> PinID: <pin #2> * *

In this example, component is of type widget (89W), and has auniversally unique component identifier (88W). Any desired componentlevel styles or other attributes are associated with the componentthrough component attributes 86W. The widget includes a universallyunique widget identifier 121 and a name (Pinterest widget) 122. Thewidget definition 124 includes the source 126 from which the contentsassociated with the widget are to be obtained from—specifically, the URLhttps://pinterest.com/wrap_widget_server/ and the parameters 130 to besent to the widget server. In the example above, the only parametersspecifically shown are the Pin Ids of interest. The Pin Ids are used bythe widget server to identify the particular Pinterest pin(s) to betransmitted to the wrap. In the illustrated example, two pins are shownalthough it should be appreciated that any number of pins and/or otherrelevant parameters may be included.

To illustrate a few additional uses of widgets, consider some featuresthat a retailer might wish to include in a wrap to facilitatetransactions. In some circumstance it may be desirable to include ashort term “specials” card (e.g., “today's special(s)”, this week ormonth's special(s), the “blue light” special, “clearance” items, etc.).A potential problem with special cards is that the card's contents willbecome stale relatively quickly. This drawback can be addressed in partby frequently putting out new wraps with fresh content. While wraps withfresh content are usually desirable, older versions of the wrap maystill be circulating which doesn't eliminate the problem. Anotherpotential approach would be to periodically update the wrap. This can beaccomplished, for example, by updating the wrap (and thus the wrapdescriptor) periodically such that a different (i.e., modified)descriptor is delivered in response to the same wrap request (e.g., byclicking on the same cover). However, such an approach is oftendisfavored and it doesn't solve the problem with respect to copies ofthe wrap descriptor stored at away from the wrap server.

Another approach is to utilize a widget in the “specials” card. In thisexample, an iframe is created within the specials card and the contentsfor the card may be delivered directly to the card at runtime by themerchant's server (e.g., a web server). Thus, the desired content of thespecials card can be updated by the merchant at any time simply byupdating servers it controls, and such updates are immediately appliedto any wrap that is instantiated after the update is made withoutrequiring the generation or use of a new descriptor. When desired, thewidget in a “specials” card can be configured as a gallery (i.e., agallery widget) so that the resulting card has an appearance that issimilar to a gallery card. Gallery widgets can also be used to presentfrequently updated items like catalog items so that it is not necessaryto update the wrap each time items are added or deleted (e.g., each timean item is added to or deleted from the catalog).

Transaction Handling Using Widgets

Referring next to FIG. 8A-8H, a widget based approach for in-wraptransaction handling will be described. The illustrated example is ashopping purchase transaction. Although particular card layouts andfunctionalities are shown and described, it should be appreciated thatthese features are merely illustrative of a very specific example andthat virtually any desired card based functionality and presentationcould be provided in their place.

FIG. 8A reproduces the first page of gallery card 316 as shown in FIG.7F. In this embodiment, trigger 340 is arranged to link the user toanother card 321 within the wrap (e.g., wrap 310) rather than to anexternal web page. Therefore, when the user presses the “Buy Now” button327 on card 316 (or any other portion associated with trigger 340), thewrap transitions to an associated shopping card 321 as illustrated inFIG. 8B, which facilitates the beginning of the purchase process.

In the embodiment illustrated in FIG. 8B, the card descriptor associatedwith the shopping card 321 includes a widget descriptor 118 thatindicates that the internal frame occupies the entire card. The widgetdescriptor also identifies the source 126 for the card content—in thiscase a transaction server. Thus, the entire content of card 321 isdictated by the transaction server. The card may contain links which canthen provide new information to be rendered in the internal frame.

In the illustrated embodiment, the content of shopping card 321 containsproduct information 403, a quantity selector 405, and Add to Cart button407, a Proceed to Checkout 409 button, a navigational link 411 forcontinued shopping and a cart icon 413. The product information 403provides some information about the selected product and may take anysuitable form. In the illustrated embodiment, an image and textualdescription is provided. The quantity selector 405 allows the user toselect the number of units of the displayed product that the user wouldlike to purchase. User selection of the Add to Cart 407 button adds theselected item (including the quantity purchased) to a list of purchaseditems which is graphically indicated to the user by incrementing thenumber shown in the cart icon 413. This change in cart icon state can beseen by comparing FIG. 8B, which shows the cart icon prior to adding anitem to the card and FIG. 8C, which shows the cart after adding an item.Any changes in the card's state, such as updating the quantity 405and/or the cart 413, would typically be sent back to the transactionserver using appropriate APIs, although in other embodiments, suchchanges can be stored locally in association with the wrap until thepurchase process is completed. Navigational link 411 includes the text“Continue Shopping”. When selected, the navigational link 411 returnsthe user to the card 316 from which they began or some other card withinthe wrap.

To complete a transaction, the user selects the “Proceed to Checkout”button 409. The transaction can then be completed in a number of ways.In some embodiments, selection of Proceed to Checkout triggers aCul-de-sac to a website at which the transaction is completed (e.g., tothe vendor's website or other suitable location). This allows the vendorto make use of their existing purchase transaction infrastructure.However, in other embodiments, it may be desirable to complete thetransaction within the widget itself. A representative but nonexclusivewidget based approach is described below with reference to FIGS. 8D to8H.

In the illustrated widget based approach, selection of “Proceed toCheckout” button 409 triggers a link that causes the transaction serverto serve new content to the iframe which is diagrammatically illustratedas Order Summary frame 322 as shown in FIG. 8D. In the illustratedembodiment, the Order Summary frame 322 summarizes the items in theshopping cart and provides mechanisms by which the user can enteradditional information relevant to the purchase (e.g. a Promo Code),cancel the transaction, or return to shopping by selecting button 411.

Selection of the “Continue to Checkout” button 418, causes thetransaction server to serve new content to the iframe which isillustrated as the Billing Information frame 323 as shown in FIG. 8E.The Billing Information 323 provides text entry boxes for inputting thebuyer's billing information. In various embodiments, the information canbe entered manually or automatically using an auto-fill function as iswell known in the art.

Once the user billing information is entered, the user may continue tothe—Shipping Information frame 324 seen in FIG. 8F by selecting the“next” icon 417.

Similarly, once the required shipping information is entered, manuallyor automatically using auto-fill, into the text entry boxes on theShipping Information frame 324, then the user may transition to thePurchase Summary frame 325 seen in FIG. 8G. Selecting the “CompleteOrder” button 419 on Purchase Summary frame 325 commits the purchase,causing the order to be transmitted to the vendor shopping platformwhere it is processed and a receipt is returned to the user anddisplayed in Receipt Confirmation frame 326 as seen in FIG. 8H.

In still other implementations, stored user information can beauto-filled into the various frames. It can be imagined that the desiredframe sequences may vary significantly based on both the current stateof a particular frame and what persistently stored user information isavailable to the wrap.

The ability of a wrap designer to provide content and functionalitydirectly into a wrap from an external source gives the wrap designers apowerful tool for both updating wrap content and integrating a widevariety of different services into a wrap.

Maintaining State Information

In many circumstances it may be desirable to transitorily orpersistently maintain state information associated with a user and/orstate information associated with a wrap 10. Some information, such asgeneral information about the user, may be shared state information thatis relevant to a number of different wraps. Other state information maybe specific to a particular wrap (e.g., a particular user selection orinput within a wrap, etc.). Still other relevant state information canbe more global state information that is relevant to all instances of aparticular wrap independent of the specific user.

State information can be stored in a number of ways and the appropriatestorage techniques will vary in part based on the nature of the stateinformation. By way of example, general information about a user andother user specific shared state data can be maintained in a cookie, orwhen the user has a persistent viewer application, the user stateinformation can be persistently stored locally in association with theviewer application. If desired, any or all of the shared stateinformation can also be stored on the server side. The shared stateinformation may be useful to support a wide variety of differentservices including: user login and/or authentication; e-commerceapplications where the identity, contact info, mailing address, creditcard information etc. of the user may be necessary; integration withother applications (e.g. a calendar application, a chat application,etc.); and many other services. User specific shared state informationcan also be used to affect the navigation within a wrap. For example,user demographic information can be used to determine which card todisplay next in a set of cards.

There are also a variety of circumstances where it will be desirable topersistently maintain state information about the state of a particularwrap. For example, if a card includes a dialog box that receives a userselection or a textual input, it may be desirable to persistently storesuch selections/inputs in association with the wrap itself so that suchinformation is available the next time the wrap is opened by the sameuser (or same device).

In a nonexclusive embodiment, a state descriptor 68 is created and usedto maintain state information associated with a particular wrap asillustrated in FIG. 5B. The state descriptor 68 is associated with botha specific wrap and a specific user and thus can be used to store stateinformation relevant to that specific user's interaction with the wrap.When persistent state descriptors are used, the state descriptor 68 maybe stored with the wrap on the publication server 22. When the user hasa persistent viewer application, the state information can additionallyor alternatively be stored locally in association with the viewerapplication either in the state descriptor form or in other suitableforms. Generally, a state descriptor 68 will include a wrap ID 42 and auser ID that identify the wrap and user that the descriptor isassociated with respectively. The state descriptor 68 also stores therelevant state information in association with the card and componentIDs for which the state information applies.

In certain embodiments, it may also be desirable to synchronizedifferent instantiations of state information, depending on the wherethe state information is stored. For example if a user updates theircredit card or shipping address information at a publication server 22,then the corresponding state information residing within any particularwraps associated with the user, or within a persistently stored wrapviewer residing on a communication device belonging to the user, wouldpreferably automatically be updated. Conversely, any state informationlocally updated within a wrap and/or a persistently stored viewer wouldalso selectively be updated in any other instantiations of the stateinformation, such as but not limited to, other wraps, publicationservers 22, on a network, or any other remote data processing locationfor example.

Transaction Handling

Referring again to FIG. 8A-8H, a card based approach for in-wraptransaction handling will be described. The illustrated example is ashopping purchase transaction. Although particular card layouts andfunctionalities are shown and described, it should be appreciated thatthese features are merely illustrative of a very specific example andthat virtually any desired card based functionality and presentationcould be provided in their place. It should be appreciated that the cardbased approached described herein can be used to create the sameappearances as the widget based approach previously described. Thus, thesame figures are used for this explanation.

FIG. 8A reproduces the first page of gallery card 316 as shown in FIG.7F. In this embodiment, trigger 340 is arranged to link the user toanother card 321 within the wrap (e.g., wrap 310) rather than to anexternal web page. Therefore, when the user presses the “Buy Now” button327 on card 316 (or any other portion associated with trigger 340), thewrap transitions to an associated shopping card 321 as illustrated inFIG. 8B, which facilitates the beginning of the purchase process.

In the embodiment illustrated in FIG. 8B, the shopping card 321 containsproduct information 403, a quantity selector 405, and Add to Cart button407, a Proceed to Checkout 409 button, a navigational link 411 forcontinued shopping and a cart icon 413. The product information 403provides some information about the selected product and may take anysuitable form. In the illustrated embodiment, an image and textualdescription is provided. The quantity selector 405 allows the user toselect the number of units of the displayed product that the user wouldlike to purchase. User selection of the Add to Cart 407 button adds theselected item (including the quantity purchased) to a list of purchaseditems which is graphically indicated to the user by incrementing thenumber shown in the cart icon 413. This change in cart icon state can beseen by comparing FIG. 8B, which shows the cart icon prior to adding anitem to the card and FIG. 8C, which shows the cart after adding an item.The changes in the card's state would typically be stored locally inassociation with the wrap until the purchase process is completed,although in other embodiments, such changes can be immediatelycommunicated to a vendor's shopping platform using appropriate APIs.Navigational link 411 is a trigger that includes the text “ContinueShopping”. When selected, the navigational link 411 returns the user tothe card 316 from which they began or some other card within the wrap.

Selection of “Proceed to Checkout” button 409 causes the wrap totransition to Order Summary Card 322 as shown in FIG. 8D. Alternatively,a left swipe gesture from Shopping Card 321 will also cause the wrap totransition to Order Summary Card 322. In the illustrated embodiment, theOrder Summary Card 322 summarizes the items in the shopping cart andprovides mechanisms by which the user can enter additional informationrelevant to the purchase (e.g. a Promo Code), cancel the transaction, orreturn to shopping by selecting button 411.

Swiping to the left on the Order Summary Card 322, or selection of the“Continue to Checkout” button 418, causes the wrap to transition to theBilling Information Card 323 as shown in FIG. 8E. The BillingInformation card 323 provides text entry boxes for inputting the buyer'sbilling information. In various embodiments, the information can beentered manually or automatically using a auto-fill function as is wellknown in the art.

Once the user billing information is entered, the user may transition tothe next card—Shipping Information Card 324 seen in FIG. 8F by eitherswiping left or selecting the “next” icon 417.

Similarly, once the required shipping information is entered into thetext entry boxes on the Shipping Information Card 324, then the user maytransition to the Purchase Summary Card 325 seen in FIG. 8G. Selectingthe “Complete Order” button 419 on Purchase Summary Card 325 commits thepurchase, causing the order to be transmitted to the vendor shoppingplatform where it is processed and a receipt is returned to the user anddisplayed in Receipt Confirmation Card 326 as seen in FIG. 8H.

Each of the user buttons 327, 407, 409, 417, 418, 419 as well as links411 may be implemented as triggers. In circumstances where the object ofthe trigger is to link to another card, then the link associated withthe triggers is simply the target card. Where other functionality isrequired, the trigger can initiate the desired action(s) and also linkto a target card if appropriate.

It should be appreciated that it may be desirable to define somewhatdifferent card transition behaviors for different cards in the shoppingpurchase sequence. For example, a left swipe on Receipt ConfirmationCard 326 (FIG. 8H) may be arranged to return the user to the card fromwhich the purchase sequence began—i.e., Gallery Card 316 (FIG. 8A) orsome other location within the receipt deemed appropriate by the wrapauthor. It may be desirable for a right swipe on Receipt ConfirmationCard 326 to cause a transition back to the Purchase Summary Card 325 butto have the state of the Purchase Summary Card 325 changed to provide an“Order Submitted” message in place of Complete Order button 419.

The desired behavior of Purchase Summary Card 325 may be more complex.For example, when the Purchase Summary Card 325 is in the state shown inFIG. 8G (i.e., the purchase order has not yet been committed), it may bedesirable to have a right swipe transition the wrap back to ShippingInformation Card 324 and to disable a left swipe since the author maynot want to commit a purchase transaction without an affirmativeselection of the “Complete Order” button by the user. Conversely, whenthe Purchase Summary Card 325 is in the “Order Submitted” state (notshown), it may be desirable to allow the user to left swipe back to theReceipt Confirmation Card 326, whereas a right swipe might transitionthe wrap back to the Gallery Card 316 (FIG. 8A), where the purchasesequence began, or some other predetermined landing card. In still otherimplementations, the right swipe could be disabled if desired.Regardless of the desired card transitioning behavior, the desiredbehavior can readily be defined using the behavior definitions describedabove. Importantly, the behavior definitions can also take the currentstate of the cards into the account in determining the card transitionlogic. It should be apparent that any of the described cards can bearranged to interact with vendor e-commerce websites (e.g., ShopifyAPIs), back-end e-commerce systems, platforms and the like.

In the embodiment illustrated in FIGS. 8A-8H, the purchase of a productis accomplished through a series of sequential cards designed to illicitfrom the viewer the information necessary to complete the electronictransaction. In an alternative embodiment, the content of these cards,including the various data entry fields, can also be implemented in oneor more gallery cards. In such embodiments, the viewer would be requiredto scroll up and down the gallery card(s) and enter the appropriateinformation in the displayed data entry fields.

In the illustrated card deck, Order Summary Card 322 and PurchaseSummary Card 325 are described as separate cards. It should beappreciated that the functionality of these two cards could beimplemented as a single card shown in two different states, with theOrder Summary state (e.g., the state shown in FIG. 8D) being shown whenpurchaser information is still missing and the Purchase Summary state(e.g., the state shown in FIG. 8G) being shown when all needed purchaserinformation is present.

A potential advantage of using an installed or native wrap packageapplication based viewer is that user information can be securely storedwithin the viewer and, if desired, automatically associated with theorder as appropriate, thereby potentially eliminating the need to renderthe Billing and Shipping Information Card 323, 324.

In still other implementations, the stored user information can beauto-filled into the various cards. It can be imagined that the desiredcard sequences may vary significantly based on both the current state ofa particular card and what persistently stored user information isavailable to the wrap. The ability to simply select/declare a desiredbehavior from a palette of predefined card behaviors give card authors(and template designers) a powerful tool for providing complex cardbehaviors without requiring the authors to learn or understand theintricacies of card navigation programming. Rather, system designers candefine a number of card behaviors that are believed to be useful, andany of those predefined behaviors can be used by the template designersand card authors. If new card behaviors are desired, they can readily bewritten and added to the card behavior definitions 60.

Serving a Wrap Package

There are a number of items associated with defining and rendering awrap package. These include the wrap descriptor 40, the wrap runtimeviewer 50, the referenced assets 65, and when appropriate, the behaviorextensions 62 and/or state descriptor 68. On the wrap server side, theseitems may be stored in any arrangement that is deemed appropriate forsecurely delivering the various items in an efficient manner.

Conceptually, the various wrap items may be thought of as being storedseparately from one another as illustrated in FIG. 9A. By way ofexample, these may include one or more of each of: a wrap packagedescriptor store that stores wrap descriptors 40; a wrap viewer storethat stores the runtime viewer(s) 50; a state descriptor store thatstores the state descriptors 68, an extensions store that storesextensions 62; and an assets store that stores assets 65. In variousembodiments, it is understood that the assets 65 used to populate wrappackages 10 may be obtained from any available source and there is norequirement that all of the assets be contained or included in a singlestore.

Although the various stores are shown separately for emphasis, it shouldbe appreciated that their respective functionalities can be combinedinto one or more physical store(s) in the same or different locations inany desired manner. Furthermore, each of these store items is discretelycacheable both on the network side and on individual devices.

In non-exclusive implementations, the wrap distribution environment asdepicted in FIG. 9A may be configured as a Content Delivery Network(CDN), meaning that servers and stores are deployed at different datacenters across the Internet. As a CDN, the wrap distribution environmentis preferably optimized to serve various wrap packages to a largenumbers of users with minimal delays.

In the wrap descriptor framework described above, much of the actualcontent of the cards (e.g., assets 65) is maintained outside of the wrapdescriptor 40. That is, many, most or all of the wrap package's assetsare referenced within the wrap descriptor 40 rather than being storedwithin the descriptor 40. Thus, the wrap descriptor 40 can be quitesmall even for large wraps that are rich in media content. As a result,the wrap package (i.e., the wrap descriptor 40) can be quicklydownloaded while still providing the viewer with a full description ofthe entire wrap structure. This separation of assets from the descriptorhelps make wrap packages highly portable.

An asset 65 referenced by a card 14 of a wrap 10 assets can bedownloaded to the consuming device 12 using any desired scheme. By wayof example, in some scenarios, the assets 65 associated with anyparticular card 14 can be downloaded on an “as needed” basis, only whenthe card is to be displayed or is expected to soon be displayed. Inother scenarios various caching schemes can be use, whereby the assetsassociated with nearby cards are downloaded while a given card isdisplayed. In still other scenarios the downloading of some, or all, ofthe wrap package assets is begun shortly after the wrap descriptor isreceived and, when necessary, other assets are downloaded on an asneeded or other appropriate basis.

Referring next to FIG. 9B, another embodiment of an environment for thecreation and distribution of wrap packages will be described. Theenvironment includes one or more of each of wrap descriptor server/store140, runtime viewer server/store 150 and asset stores 165. A browser 151or runtime viewer app running on a communication device 12 communicateswith the server/stores through an appropriate network (e.g., theInternet), which is preferably configured as a content delivery networkCDN. The runtime viewer server/store 150 is arranged to store anddeliver the runtime viewer 50, a store 162 of extensions 62 and/or ashim 400 (described later) upon request. That is, requests for theruntime viewer 50, extensions 62 and shim 400 are directed towards andfulfilled by the runtime viewer server/store in the illustratedembodiment.

The wrap descriptor server/store 140 is arranged to store and deliverupon request the wrap descriptors 40, state descriptors 68 and any otherpersonalization information 69 relevant to a particular user. Thus,requests for specific wrap descriptors 40, state descriptors 68 and anyother personalization information 69 are directed towards and fulfilledby the wrap descriptor server/store 140. The state descriptor store(s)168 and personalization store(s) 169 may be contained within the wrapdescriptor server/store 140. When desired, multiple different wrapdescriptors server/stores 140 may be used and/or the state descriptors68 and/or personalization information 69 can be stored and deliveredfrom other locations.

As previously mentioned, the assets 65 may be stored at a wide varietyof different locations as diagrammatically represented by asset stores165. Wrap authoring tools 35, management tools 37 etc. can alsocommunicate with wrap descriptor server/store 140 and asset stores 165as appropriate. The authoring tools may access existing wrap descriptors40 to facilitate new wrap creation, wrap mixing and/or wrap editing(when permitted). The authoring tools would also access the wrapdescriptor server/store 140 to upload new wrap descriptors, etc.Similarly, assets stores 65 may be accessed and/or added to as part ofthe wrap creation process. Similarly various management tools 37 may bearranged to communicate with the various stores to facilitate anydesired management, tracking and other functionality.

Referring to FIG. 10, a representative process suitable for deliveringwrap packages is described. In the illustrated embodiment, a server(e.g., publication server node 22 or runtime viewer server/store 150)initially receives a request for a particular wrap package 10 (step190). In embodiments in which the wrap ID 42 is a URL, the request canbe invoked at a requesting device 12 simply by activating (e.g.,clicking on or otherwise selecting) a link that contains or otherwisedefines the URL. Thus, the wrap 10 can be accessed from virtually anyplatform capable of accessing a web link. As previously discussed, acover that represents the wrap may include the wrap ID URL and thus therequest can be invoked by simply clicking on a cover which may beembedded in a web page or an ad served in conjunction with a web page,embedded in a messages, such as an email, a text or SMS message,embedded in a Twitter tweet, or may be included with any other deliverymechanism that supports the embedding of a link.

When the server receives the request it identifies and fetches thedesired wrap package 10 based on the wrap ID 42, contained in the targetURL (step 192). The server also determines the run-time environment onthe requesting device (step 194). This can be accomplished usingstandard bootstrap queries to the requesting device 12. Thedetermination of the run-time environment will typically include anidentification of the type or class of the requesting device 12 andviewing software, such as the operating system of the device 12 and/or aparticular browser that the device 12 may be using. For example, thedetermination would typically ascertain the particular model of therequesting device (e.g., an Apple iPhone 6 Plus, a Samsung Galaxy S4, orother particular smart phone, tablet, laptop computer, desktop computer,smart watch, etc.) and the version of the software (e.g., browser orapp) that is making the request, etc., and whether or not the requestingdevice has an installed wrap viewer or not. Of course, the server canalso ask the requesting device for any additional information considereduseful.

A determination is also made regarding whether a runtime viewer isalready present on the requesting device (step 196). If a suitableviewer is present on the requesting device (e.g., the device has a wrapviewer app installed thereon or a browser based viewer is alreadypresent on the device), the requested wrap is delivered without a viewerin step 197. Alternatively, if a viewer is not present on the device, anappropriate run-time viewer 50 is delivered together with the requestedwrap in step 198.

The delivered wrap package 10 is opened and consumed by the user on thedevice 12 via either a browser operating in cooperation with a wrapviewer 50 or the wrap package app. In either case, the layout of thecards 14 is customized for display on the screen of the requestingdevice 12. Once opened, the user can view, experience and interact withthe wrap package 10 as intended by the author.

Regardless of whether the wrap viewer 50 is already present on therequesting device or is supplied together with the wrap 10, thepresentation tools 55 are responsible for rendering the wrap 10 in aformat suitable for the requesting device. Thus, when the wrap 10 isrendered, all of the content of the card(s) 14 is preferably arranged tofit on the display screen without the user needing to manually size thescreen or scroll through the card, unless the card is specificallydesigned for scrolling such as may be the case with a gallery type card.This can be done because the presentation tool 55 knows the screendimensions for the rendering device 12 and selects the presentation thatis optimized for the particular display on the requesting device 12.

In a nonexclusive embodiment, the browser based versions of the run-timewrap viewer 50 may be written in a widely accepted format that can beexecuted by general purpose browsers operating on most any device. Byway of example, JavaScript currently works well for this purpose,although other frameworks may be used as well. In some embodiments, theviewer 50 is a general purpose viewer that includes many, most, or allof the viewer tools and behavior definitions 60 that are available inthe wrap ecosystem so that virtually any wrap can be viewed and all ofits featured implemented using the accompanying viewer. In otherembodiments, it may be desirable to provide a more compact viewer thatincludes a basic set of viewer tools and behavior definitions that issuitable for rendering and interacting with most wraps, or a basic setaccompanied by any additional tools/behavior definitions that deemednecessary to render and/or interact with the specific wrap delivered.

It is anticipated that as the popularity of wrap packages increases,more users will install wrap viewers on their devices in the form ofmobile apps, applications, browser plug-ins, etc., which is expected toreduce the proportion of wrap requests that require run-time delivery ofa browser based viewer.

Referring next to FIG. 11, an alternative, browser based process forrequesting, delivering and rendering wrap packages will be described.This embodiment is well suited for use with the multi-tier wrap enginearchitecture of FIG. 9B. In this embodiment, the runtime instance of thewrap package is constructed locally at the requesting device based onthe wrap descriptor at runtime. Such an approach may have severalpotential efficiency related advantages over the process described withrespect to FIG. 10 including supporting simpler wrap caching strategies.

Initially, in step 202, a browser 151 on a requesting device 12 requestsa particular wrap package 10 using the wrap ID 42. As previouslydescribed, in embodiments where the wrap ID 42 is a URL, the request canbe invoked at a requesting device 12 simply by activating (e.g.,clicking on or otherwise selecting) a link that contains or otherwisedefines the URL. Thus, the wrap 10 can be accessed from virtually anyplatform capable of accessing a link. In the embodiment of FIG. 9B, thisrequest is directed to the runtime viewer server/store 150, although inother embodiments, the same function can be performed by wrap servernode 22.

When the runtime viewer server/store 150 (wrap server node) receives therequest, it returns a generic HTML shim 400 to the requesting device 12(step 204) rather than directly returning the requested wrap at thisstage. The shim opens into a page (e.g., a blank browser webpage) thatwill be populated with the wrap and includes scripts suitable forinitiating the process of accessing and rendering the requested wrappackage 10.

By way of example, FIG. 13 illustrates a nonexclusive embodiment of ashim 400 suitable for use for this purpose. The primary function of theillustrated shim 400 is to provide a mechanism for calling the runtimeviewer 50. This is accomplished by script tag 1402 in the illustratedembodiment. Thus, the shim 400 ensures that the requesting device has,or obtains a runtime viewer suitable for handling the wrap before thewrap is actually delivered.

In a non-exclusive embodiment, the shim is implemented in HTML code thatis delivered to a browser in step 204 in response to a wrap request 202.As can be seen in FIG. 13, the shim 400 is a highly compact. It includesa script tag 1402, a default page title 1403, a style sheet 1405 thatdefines the initial layout of the page that will hold the wrap, an iconimage 1407, and a div 1409. The script tag 1402 is primarily responsiblefor requesting the runtime viewer 50. The default page title 1403 is thelabel that is typically displayed in the browser tab associated with theblank window page that the wrap is opened into (the page title 1403 issimply “wrap” in the illustrated embodiment). The style sheet 1405defines the layout of the page that is initially displayed, which isessentially blank at the initial stage. In the illustrated embodiment,CSS is used to define the page layout, although any other layoutdefinition that can be interpreted by the browser can be used. The iconimage 1407 is an image that some browsers display in the browser tabadjacent the title. The div 1409 causes the browser to allow the runtimeviewer to rewrite the DOM for the page starting from that defined divnode.

Returning to FIG. 11, the browser that receives the shim 400 willtypically handle the runtime viewer request by first checking to seewhether an appropriate runtime viewer 50 is already present on thedevice (step 206). If so, the runtime viewer 50 is launched in step 212.If a suitable runtime viewer is not already present on the requestingdevice, a suitable viewer is requested and delivered to the requestingdevice (steps 208/210) and launched by the browser (step 212). In theembodiment of FIG. 9B, the runtime viewer request is also directed toruntime viewer server/store 150.

The downloaded runtime viewer may be written in a format that can beexecuted by most browsers so that the same generic runtime viewer may beused to view any wrap on virtually any computing device that contains ageneral purpose browser. By way of example, JavaScript is a dynamicprogramming language that is currently well supported by most browsers,and is therefore, well suited for use in the runtime viewer. Of course,other now existing of later developed programming languages andframeworks may be used in other embodiments.

Once the runtime viewer 50 launches, it requests the wrap based on thewrap ID 42 used in the initial request. In a non-exclusive embodiment,the request may take the form of WRAPI.WRAP.CO/WRAP/<WrapID>, where<WrapID> is the wrap ID 42. In response, the browser or viewer willtypically check to see whether the wrap descriptor 40 corresponding tothe wrap ID 42 is available locally (step 213). If not, the wrapdescriptor 40 is requested from and returned by the wrap descriptorstore 140, as represented by steps 214, 216.

In embodiments where the initial wrap request comes from an executingruntime viewer (as for example from a native viewer app), then therewould be no need for steps 204-212 and the initial wrap request 202would initially check for the requested wrap descriptor locally (step213) and proceed from there.

Once the wrap descriptor 40 is received, it is processed by the runtimeviewer 50 resulting in the construction and rendering of the wrap in thebrowser page associated with shim 400. Some of the steps performed orcaused by the runtime viewer 50 as it processes the wrap descriptor 40are schematically represented as elements 218-234 in the flow chart ofFIG. 11. Although a particular flow is illustrated, it should beappreciated that the described steps are functional in nature and arenot necessarily performed in the illustrated order.

While processing the wrap descriptor 42, the runtime viewer 50determines whether the wrap package 10 has an associated statedescriptor 68 (step 218). As discussed above, it is contemplated thatmany wrap packages will not have an associated state descriptor whileothers will. A number of mechanisms can be used to indicate theintended/expected presence of a state descriptor 68. By way of example,in some embodiments, the wrap descriptor 42 includes a state descriptorflag (not shown) that indicates whether a state descriptor 68 isintended to be associated with the wrap. In such embodiments, theruntime viewer 50 determines whether to request the state descriptor 68based on the status of the state descriptor flag. In another example,wraps 10 that require state descriptors 68 may be arranged to simpledeclare the existence of an associated state descriptor and the runtimeviewer may be arranged to request the appropriate state descriptor. If astate descriptor 68 is intended, it is requested and received asdiagrammatically represented by step 220. In the embodiment of FIG. 9B,any state descriptor requests are directed to wrap descriptorserver/store 140, although they may be directed to wrap server 22 orother suitable stores in other embodiments. Typically, the browser orruntime viewer would first check to see if the state descriptor iscached or stored locally before sending a request to the server.

Another step performed by the runtime viewer 50 is determining if thewrap 10 has any associated behavior extensions 68. As discussed above,the wrap 10 may have a number of associated behaviors. The runtimeviewer 50 may internally support many, most or all such behaviors.However, to help keep the runtime viewer 50 relatively compact whilesupporting a wide variety of functionality, the runtime viewer 50 isconfigured to support additional extensions 62 that may be utilized todefine additional behaviors. Thus in step 222, the runtime viewer 50determines whether any extensions 62 are needed to properly render thecurrent wrap (step 228). If yes, the needed extensions are requested andretrieved (step 226). There are a number of mechanisms that can be usedto trigger the extension request(s). For example, the wrap descriptor 40may be arranged to identify the needed extensions 62 such that they canbe retrieved as a group early in the wrap rendering process. In otherembodiments, the extensions 62 may be retrieved on an as needed basis asthe descriptor 42 is processed or in any other suitable manner. In stillother embodiments, the required extensions 62 (which may be written inJavaScript or other suitable form) may be included as part of thedescriptor 42 itself—as for example, in a block after the carddescriptors or at the end of the descriptor. In such circumstances therewould be no need to separately request the extensions. Regardless of theembodiment used to retrieve the extensions 62, or if no extensions 62are needed, the runtime viewer 50 generates the HTML for the requestingdevice 12 in step 228. In the embodiment of FIG. 9B, any extensionrequests are directed to the runtime viewer server/store 150.

The runtime viewer is arranged to process the wrap descriptor 40 in amanner that generates the HTML appropriate for rendering the wrap on therequesting device (Step 228). This processing is described in moredetail below with respect to FIG. 12.

As part of the processing and rendering, the assets 65 associated withthe various cards 14 associated with the wrap 10 are retrieved in step230. In many cases, the assets 65 associated with a particular card willbe retrieved as their associated card descriptors are processed duringthe wrap descriptor processing. However, it should be appreciated thatthe actual timing of the asset requests may be widely varied. Forexample, in some circumstances it may be desirable to only downloadcertain assets 65 when the associated card is displayed or just prior tothe card being displayed, in accordance within some predeterminedcaching strategy. In some embodiments, the runtime viewer 50 determinesthe timing of the asset requests, while in other embodiments, suchdecisions may be delegated to the browser. As previously discussed, theassets may be stored at a variety of different locations asdiagrammatically illustrated as asset stores 165 in the embodiment ofFIG. 9B.

As the wrap descriptor is processed, the wrap is rendered on therequesting device by populating the tab or page opened by shim (step234).

In some circumstances the initial wrap request may come from a runtimeviewer that is already open and executing. In such circumstances it maybe desirable for the runtime viewer to directly request any needed wrapdescriptors from the wrap descriptor storage server (e.g. wrapdescriptor store 1040). Such a process would effectively skip describedsteps 202-212.

Rendering Wrap Packages

Wrap packages are each an abstract, platform-independent data structurecontaining all the information needed for a wrap runtime engine 50 torender the wrap and facilitate its interaction and behaviors. Although anon-exclusive implementation of the wrap runtime is in the JavaScriptprogramming language for execution within a conventional web browserusing HTML and CSS, the wrap runtime could also be implemented usingother languages and technologies specific to different operating systemsand devices. Since the runtime engine 50 renders the wrap at the time ofconsumption, it can optimize the rendering and interface for the deviceit is running on as well as dynamically generate content based oncontext.

Referring next to FIG. 12, a process of generating and updating the viewof the wrap 10 during rendering is described. Initially, in step 251,the runtime viewer 50 generates an object graph based on the descriptor40. The object graph serves as the state model for the wrap. In theillustrated embodiment, the wrap descriptor 40 uses the JSON dataformat. In general, the object graph is arranged to represent thestructure of the wrap document in a manner that: (1) is simpler totransform for presentation; and (2) that makes the behaviors and stylinginformation readily available for the runtime to apply as needed. Theobject graph can be created using a variety of techniques. As will beappreciated by those familiar with the art, using JSON objects as thewrap descriptors makes runtime generation of the object graph arelatively simple and straightforward task. The JSON object istransformed into JavaScript objects automatically by the runtime. Thenstraight-forward transformations take place to transform the on-diskrepresentation into a runtime object graph from which it is easier torender the desired views and attach the desired behaviors.

After the object graph has been built, the runtime viewer creates adocument object model (DOM) based on the object graph (step 253). TheDOM corresponds to the view, and as will be appreciated by thosefamiliar with the art, the DOM is a standard representation that may beused directly by the browser to render the wrap in a conventional manner(step 255). That is, the DOM is an internal representation that can bedirectly used by the browser to render the wrap.

Once the DOM has been built, the runtime viewer associates theappropriate handlers and navigation tools based on the current modelstate (step 258). That is, if the first card is displayed, the viewerwill associate the event handlers and navigation tools with the wrapthat are appropriate for the first card. These include the handlersassociated with triggers as previously discussed.

Thereafter, when a user input event is received from a user interactingwith the wrap, the appropriate handler processes the received event.This process is diagrammatically represented by the event loop thatbegins at step 260.

When an event is received at 260, an event dispatcher determines whetherthere is an active handler that matches the event (step 262). If so, theevent is delegated to the matching handler (step 264), which determineswhether the event is valid (step 265). If valid, the handler acts on theevent (step 266) and updates the display status of the model (i.e., thehandler updates the state of the object graph model). In step 268, theview state is then updated as needed based on the new model state. Anytime the view state changes, the active handlers are updated asnecessary based on the new (i.e., then current) model state (step 269).Thereafter, control is returned back to step 258 and the above processis repeated if a new event is received in step 260.

To give a specific example, consider the navigation behaviors that mightbe associated with the first card 311 of wrap 310 illustrated in FIG.7A. In a simple example, the only permitted navigational behavior forcard 311 may be a left swipe gesture, which is arranged to flip thedisplayed to the second card 312 shown in FIG. 7B. In such a case, whenthe first card 311 is rendered and displayed, the only validnavigational handler associated with the wrap in step 258 would be aleft swipe handler arranged to cause the display status of the model tochange to the next card 312 of FIG. 7B in response to a left swipe. Inthis state, the only time the event dispatcher will find an activematching handler is when a left swipe event is detected. Thus when aleft swipe is detected, the event dispatcher would delegate the event tothe left swipe handler (step 264), which is validated in step 265 andacted upon in step 266 by updating the display status in of the model(i.e., making the next card active—in this case second card 312)—whichin turn will cause the view state to update to the second card (step268) and a new state model in step 269.

As previously discussed, the navigation behaviors for the second card312 are somewhat different than the navigation behaviors for the firstcard. The left swipe handler remains the same (i.e., causing atransition to the next card)—however a right swipe is now relevant andwill cause a transition to the previous card (i.e., back to the firstcard 311). Thus, in step 258 and 269, a right swipe handler would beactivated when the model state transitions to the second card.

Of course, there may be a wide variety of different handlers that areappropriate for specific cards and/or model states. In somecircumstances the same gesture may invoke different behaviors based onthe active card or model state. For example, a left swipe gesture madeon the last card may invoke an animation that gives the appearance ofthe card beginning to flip, but then springing back, to graphicallysuggest that the displayed card is the last card. To facilitate this, afinal card left swipe animation handler may be activated when the lastcard is displayed, whereas the left swipe page transition handler wouldbe deactivated.

The handlers associated with triggers are also particularly important tothe wrap environment. For example, selection of a trigger component(e.g., by tapping at any location on a screen within the bounds of adisplayed trigger component) may activate the trigger. Of course a widevariety of different events can be used to activate a trigger. In manyinstances, the events will be user initiated events such as selection ortapping of a trigger through the performance of a selection gesture orbased on some other user input. In other circumstance, the activatingstep may system generated (e.g. an elapsed time, a sensor input thatexceeds a threshold, the receipt of a particular message or a very widerange of other potential events).

Once activated, a trigger may exhibit any desired behavior which can beassociated with the trigger through appropriate behavior declarations95. By way of example, if the trigger is a linking trigger, the triggermay initiate a navigational link to another card or wrap, or link to anexternal webpage once activated using a defined linking behavior (e.g.,open in same tab, open in new tab, etc.) Other triggers can have a widevariety of different associated behaviors to support almost any type ofapplication functionality.

Component Model

Wraps are composed of a number of different types of components and thewrap runtime has rules for handling the various component types that itis expected (and designed) to encounter. FIG. 14 illustrates anonexclusive wrap component model suitable for use in the wrapenvironment. The component types illustrated in the non-exclusiveembodiment of FIG. 14 include containers 580, textbox 582, image 583,video 584, link 586, location 587, widget 588 and feed 589. Some of thecomponent types may have subtypes that are handled in different ways.There may be a number of different container types that are handleddifferently by the runtime. A container component is generally arrangedto hold other components and different container types may be used fordifferent purposes. For example, in the illustrated model, threespecific container types are shown, specifically card 590, gallery 592and gallery items 594.

The card container type 590 is the standard card container. As such, the“card” container type 590 has specific dimensions that will be set basedon the size of the screen that the wrap (and thus the cards) is/areintended to be rendered on. In the primary described embodiments,standard cards are expected to be rendered in a portrait view that isfully visible on a screen such that scrolling is not necessary to seethe entire content of the card. It is expected that in many mobiledevices, the card will occupy the full screen (or substantially all ofthe screen) in a portrait orientation, whereas in devices with landscapeor other non-portrait oriented display screens (e.g., most desktopdisplays, etc), the card would typically not occupy the entire displayscreen (e.g., desktop and laptop displays). Since the card size willvary with the size of the available display, the runtime has rules thatdefine the card size for any particular wrap instance based on the sizeand aspect ratio of the target screen. By way of example, one approachto automatically sizing a wrap is described in application Nos.62/144,083 and 62/191,079 which are both incorporated herein byreference.

It is contemplated that the card's aspect ratio (e.g., the ratio of cardheight to card width) will typically be maintained the same regardlessof the screen size, however, that is not a requirement, and if desired,the runtime can also have rules relating to the card's aspect ratio.

Another container type is gallery 592. As suggested above a gallery is aspecial type of card that has the ability to scroll multiple framesbeyond a single screen. Thus, when the runtime encounters a gallery cardcontainer type, it knows to bestow the gallery card with the desiredgallery behaviors as previously discussed. Galleries are composed ofgallery items and thus another container type is the gallery item 594which is a component of a gallery. When the runtime encounters a galleryitem, it knows it belongs in an associated gallery.

A number of other component types relate to other specific types ofcontent. For example, a textbox component type is arranged to hold text.Typically, the text would be included in-line within the descriptor,although that is not a strict requirement. An image component type isarranged to hold an image and/or photo. Typically, the associatedimage/photo would be obtained by the runtime using a source identifier(e.g., URL) provided in the image component descriptor. Alternatively,the image/photo could also be provided inline as well. A video componenttype is arranged to display a video. Like the image, a video istypically obtained by the runtime using a source identifier (e.g., URL)provided in the video component descriptor.

The link component type 586 incorporates is a specialty component thatis arranged to link to another location. The link could be an internallink within the wrap, a link to another wrap, a link to a website orother designated location.

The location component 587 is also a specialty component that isarranged to provided GPS or other location functionality, such as maps,driving directions, etc. The location component 587 can be implementedin a number of ways, such as by accessing and inter-operating with alocation/GPS app (e.g., Google maps or a similar app) on the deviceconsuming the wrap, by linking to a remote website or other designatedlocation providing such services, or via a widget, as described herein.

The widget component type 588 is used by widgets. As described abovewidgets are arranged to open an internal frame within the associatedcard. The content of the internal frame is not defined by the descriptoritself. Rather, the content is supplied by an external source identifiedin the widget descriptor.

The feed component type 590 is used to create feeds. In variousembodiments, the feeds can be either static or dynamic.

Of course a variety of other component types could be added, and some ofthe above component types can be eliminated, modified or combined. Thus,it should be appreciated that the component type set is extensible solong as the runtime is configured to handle such components or has theability to obtain the rules appropriate for handling such componentswhen they are encountered.

Global Components

Up to now, wraps 10 have primarily been described in terms of acollection of card descriptors 46. Each card descriptor 46 may includedata object(s) representative of one or more components 16 authored orotherwise associated with the corresponding card 14. Together, the oneor more components 16 define the structure, content and/or functionalityof the corresponding card 14. With this arrangement, individual cards 14can each be imbued with functionality, content, style(s), attribute(s),trigger(s) and behavior(s) as intended by the author. In most of theexamples provided above, the characteristics are card specific. However,when desired, component(s) can also be associated at the wrap levelrather than the card level. When applied at the wrap level, a componentis herein referred to as a “global” component, meaning the componentapplies to either all or some designated subset (i.e., two or more) ofthe cards of the wrap. In other words, the same functionality, content,style(s), attribute(s), trigger(s) and behavior(s) of globalcomponent(s) can be applied to be multiple cards 14 of a wrap 10,without requiring the same component(s) 16 to be authored into each cardindividually.

Referring to FIG. 28, a representative wrap descriptor 40 with globalcomponents for a wrap package 10 is shown. In this non-exclusiveembodiment, the wrap descriptor 40 includes wrap meta data 45 (e.g.,wrap name, author, version, etc.), a plurality of card descriptors 46for a collection of N cards 14 respectively, one or more globalcomponent descriptors 1802 for specifying a global component, and one ormore card designator(s) 1803.

Each card designator 1803 designates the cards 14 of the wrap for whicha corresponding global component descriptor 1802 will apply. In manysituations, the default setting for a card designator 1803 will beinclusive of all the cards 14 of a wrap 10, meaning the correspondingglobal component defined by a descriptor 1802 will be associated withall of the cards 14 of the wrap 10. Alternatively, the card designator1803 may be selectively set to specify only a group or subset of thecards 14 (i.e. two or more), but not all of the cards 14. In this lattercase, the global component designated by descriptor 1802 is associatedwith only those designated cards. In a non-exclusive embodiment, thedefault may be implicit such that if no card designator is explicitlyprovided, the global component is applied to all of the cards 14.

Unlike components 16 that are card specific, global componentsdesignated by a descriptor 1802 globally imbue specified function(s),content, style(s), attribute(s), trigger(s) and/or behavior(s) to all(or some designated subset) of the cards 14 of the wrap 10, not just anindividual card 14.

In the examples provided in FIG. 28, two global components descriptors1802 are provided. The first is a Media Widget. The second is/arenavigational behavior(s). In addition, card designators 1803 areprovided for each global component respectively. In each case, thedesignator specifies either all or some subset of the cards of the wrapthe corresponding global components applies. The functionality imbued bythe two global components specified herein are described below withregard to the provided examples. Again, it should be understood thatthese examples are provided for illustrative purposes only and in no wayshould be construed as limiting.

Most of the component types discussed above with respect to FIG. 14 canbe used as global components, although certain component types such ascard 590, gallery 592, and gallery item 594 are generally not includedas global components because they are typically card-specific. As such,the global component types may include, but are not limited to,containers 580, textbox 582, image/photo 583, video 584, link 586,location 587, widget 588 and feed 589. Although any of the above-listedcomponent type can be used as a global component, in practice globalcomponent(s) will often be text, an image, and/or a photo, since anauthor will most likely want to replicate this type of content within aplurality of cards 14 of a wrap 10. Whatever the type, the globalcomponent will appear at the same location, and will have the samestyle(s) and/or attribute(s), on each card 14, or designated subset ofcards 14, of the wrap package. For example, an author of a wrap package10 may wish to have text and/or a company logo appear at the samelocation on each card 14 of a wrap.

Although text, images and photos are the likely candidates, the contentof global components are by no means limited to just these types ofmedia. On the contrary, any type of media may be designated as a globalcomponent, including video and/or audio.

In addition, other types of components may also be designated as globalcomponents, such as those used for implementing transactions (i.e., thepurchase and/or reservation/booking of goods and/or services), onlinechats, GPS/location services, or any other app-like functionality thatcan be embedded or otherwise associated with a single card. In otherwords, virtually any type of component that can be included in a singlecard can also be implemented as a global component.

In addition, attributes may be associated with the wrap as a wholerather than with a specific card or component. For example, anavigational behavior can be associated at the wrap level to provide thewrap with a specific or custom navigational behavior.

In the non-exclusive examples provided below, the global componentdesignated by descriptors 1802 include a media widget and certainnavigational behavior(s). These examples are provided for illustrativepurposes. It should be understood that these specific global componentsare merely exemplary and in no way should be construed as limiting. Inreal-world embodiments, a wide variety of global components may be usedas discussed above.

A global component media widget may be implemented in a number ofdifferent ways. For example, the media widget may be a media playercapable of playing audio, music and/or video streamed from a serverassociated with a specified streaming service (e.g., Pandora, Spotify, aradio station, etc.). Alternatively, the media widget may refer to andaccess a specific music, audio and/or video file, or a library of thesame, such as an iTunes playlist, that may reside either on the samecomputing device 12 consuming the wrap or a remote location, such as aserver. As a global component, regardless of how it is implemented, themedia widget enables the functionality of playing of music, audio and/orvideo content while all (or a designated group) of the cards 14 of thewrap 10 are rendered.

Similarly, navigational behavior global components specify or imbuespecified behavior(s) on all (or some designated subset) of the cards 14of the wrap.

A further explanation of both the global media widget and globalnavigational behaviors is provided with respect to the non-exclusiveexamples provided below.

FIG. 29 shows a global media player widget 1808 appearing within all thecards 14 of a wrap package 10. As illustrated, the media player 1808includes a listing of the name of the artist and song that is playing,audio controls for playing, pausing, jumping forward and backward,volume control, etc. As the widget 1808 is global, the player willappear on all the cards 14 of the wrap 10 during consumption, regardlessof the given card 14 that is currently rendered at any given point intime. As a result, the viewer will be able to play access to the mediaplayer and control the playback of media from any card 14 in the wrap.

FIG. 30A shows a global audio widget 1810 appearing on all of the cards14 of another wrap package. In this particular example, the audio widget1810 is an image of a speaker that appears on the lower right corner ofeach card 14. The global audio widget 1810, in this example, is alsoimbued with a specific global navigational behavior that is invoked inresponse to a designated trigger. In this illustrative example, when theaudio widget 1810 is swiped upward (as represented by the arrow 1812),regardless of the card 14 that is currently being rendered, a pop-upmusic playlist 1814 overlay appears on the currently displayed card 14,as shown in FIG. 24B. By selecting a particular song name, thecorresponding track will play. In variations of this embodiment, oncethe pop-up overlay 804 is invoked, it may appear on all of the cards 14as they are swipe navigated. Alternatively, the pop-up overlay mayappear only on the originating card 14 and will go away when a swipe toanother card occurs. In the latter case, the viewer would be required toagain swipe the audio widget 1810 on another card 14 for the overlay1814 to again appear.

FIG. 31 illustrates another example of a wrap package 10 authored toinclude a global audio widget that plays audio during consumption,regardless of the given card 14 that is being displayed. In thisparticular example, the wrap 10 pertains to a promotion for a Hawaiianvacation. When the wrap is consumed, a related audio file (e.g., “theme”music pertaining to the wrap, such as background Hawaiian music in thisexample) is played. In this particular example, no visual audio playerinterface is provided as in the previous examples. On the contrary, justthe music is played to enhance the viewer experience while consuming thewrap. Since no audio player interface is provided in this example bydesign, the viewer has minimal control over the playback of the audio,which will play continuously when the wrap is being consumed. In thisexample, the iframe associated with the widget would typically have nocorresponding size and there would be no need to define a position. Thusthe height, width and position fields of the widget descriptor can benull or eliminated from the corresponding descriptor.

FIG. 32 illustrates yet another example of a global behavior. In thisexample, the global behavior is the automatic transition, as opposeduser-swiping, between the cards 14 in the wrap 10. In one variation ofthis embodiment, the automatic transition from one card to the next insequence order may occur at a fixed interval of time (e.g., every 2 or 3seconds). In an alternative embodiment, an event may cause the automatictransition. For example in FIG. 26, one more card(s) 14 of the wrap 10includes some text. In this particular example, an audio file narratingthe text on each card is played (In the particular card shown, the textregarding George Washington crossing the Delaware River is narrated).When the narration is complete, the transition to the next card isautomatically performed. This process is continually repeated until allthe cards 14 in the wrap are consumed. With this arrangement, the timingbetween transitions may vary. For example, if it takes four seconds tonarrate the text of one card and ten seconds for the next card, then thetransitions will occur in four seconds and ten seconds respectively. Asthis process is repeated for all of the cards of the wrap, the resultinguser experience is analogous to an audio book, with the added benefit ofincorporating appropriate images, photos, video, embedded functionality,etc.

With a children's book implemented in a wrap package for example, thevarious cards can include text that is narrated, as well as images,photos, video and/or animation illustrating the story. As the text ofeach card is narrated and completed, the transition to the next cardautomatically occurs. As a result, user experience is multi-sensory,providing a user experience previously not possible.

A wrap package, authored as an audio book, can also be used to marketproducts and/or services. Again, using a children's book as an example,consider the implementation of Disney's story (i.e., Winnie the Pooh) inthe form of a wrap package. In addition to the multi-sensory effects asdescribed above, the Winnie the Pooh wrap can also include, forinstance, a gallery card for items to be purchased (e.g., stuffed dollsof the main characters, such as Winnie the Pooh, Tigger, Eeyore, etc.)or other promotions such as gift certificates, coupons for Disneymerchandise, vacation packages to a Disney resort, etc. In other words,transaction functionality, via a widget, cul-de-sacing, or built intothe cards of the wrap itself, can be authored into the wrap. Again,given the unique ability to convey a story in a book-like format,including functionality interwoven with various types of media, wrappackages authored as audio books can provide a marketing and promotionalchannel previously not possible.

As noted above, the specified source of the audio content for the widgetmay vary and may include, in alternative embodiments, a streaming musicservice or a library of music files for example. It should beunderstood, however, that these examples should in no way be construedas limiting. The type of media and application functionality that can beincorporated into a global widget may widely vary and is limited only bythe imagination of the author. Examples include, but are not limited tobesides audio and music, video, images, photos, text, transactionalwidgets for the purchase or reservation/booking or goods or services,online chat widgets, GPS or location widgets, etc.

Gallery Components

Components can also be associated with galleries to create gallerycomponents in substantially the same way that they can be associatedwith the wrap to serve as global components. That is, a component can beassociated with a gallery card 316 instead of being bound to a specificgallery item or being a global component that is associated withmultiple cards. When a component is associated with a gallery card, theassociated content can be displayed on the gallery card regardless ofwhich gallery item frame is currently shown. As with other components,the specific content associated with a gallery is limited primarily bythe imagination of the gallery's author. By way of example, if a galleryshows a number of products from a particular company, an image componentassociated with the gallery card can be used to display the company logoin a corner of the gallery card so that the logo appears at the samelocation regardless of which gallery item is currently being viewed.

In other embodiments, gallery item designators can be used to identifyspecific gallery items that the gallery component is to be associatedwith. In some implementations, the gallery item designators worksubstantially the same was as card designators 1803. That is, thegallery item designator may selectively identify a specific subset ofgallery items to which the corresponding gallery component will apply.In embodiments that support gallery item designators, the defaultsetting for a gallery designator may be that the gallery componentapplies to all of the gallery items in the gallery. The default may beimplicit such that if no gallery item designator is explicitly provided,the gallery component is applied to all of the gallery items.

In still other embodiments, the content of a gallery level component canbe a variable. For example, using the logo analogy, the content of theimage component could be a variable “Company_Logo”, which obtains thelogo of the company whose product is highlighted in the correspondinggallery item. The use of such variables tend to be particularly usefulin applications in which the wraps are automatically generated asdescribed in U.S. application Ser. No. 14/816,935 (WRAPP022), Ser. No.14/816,662 (WRAPP020C1) and Ser. No. 14/816,678 (WRAPP021C1), allincorporated by reference herein for all purposes. Of course, variablescan be used in global components and/or ordinary components as well.

In summary, any component that can be embedded in or otherwise isassociated with a card can also be a global component by associating thecomponent at the wrap level rather than the card level. Designator(s)1803 further provide the ability to flexibly apply a global component toa subset of cards, but not necessarily all the cards, of a wrap. In asimilar manner, any component can also be a “gallery” component byassociating the component at the gallery level as opposed to the galleryitem level. Gallery designator(s) also provide the ability to flexiblyapply gallery components to two or more gallery items, but notnecessarily all the gallery items of a gallery card.

Runtime Environment

FIG. 15 illustrates representative components of another specific, butnonexclusive embodiment of a runtime viewer 500. The illustrated runtimeviewer 500 includes deserializer 501, event handler 506, behavior engine530, feed engine 540, identity manager 550, and state manager 560.

The deserializer 501 is arranged to transform any given wrap descriptor40 into a runtime instance of the wrap defined by the descriptor. Inessence, the deserializer steps through the wrap descriptor, generatesthe indicated cards and components, and binds the various attributes(e.g., styles, declared behaviors, etc.) and any referenced assets,feeds etc. with their associated components/cards, etc.

In the illustrated embodiment, the deserializer 501 is shown asfunctionally including an object graph building module (OG builder) 502and a DOM building module (DOM builder) 504. The object graph buildingmodule 502 is arranged to process a wrap descriptor 40 to create anobject graph 510 that binds the various attributes (e.g., styles,declared behaviors, feeds, etc.), referenced assets and anything elsedeclared or referenced in the descriptor with their associatedcomponents/cards, and serves as the runtime instance of the wrap. TheDOM building module 504 uses the object graph 510, to create a documentobject model (DOM) 520 that serves as a browser readable instance of thewrap. Although the object graph 502 and the DOM building module 504 areillustrated as discrete components, it should be appreciated that manyimplementations they would be highly integrated such that they worktogether to create the object model and the document object model fromthe wrap descriptor. Since runtime viewer 500 is arranged to create adocument object model based runtime instance, it is well suited forexecution in a general purpose browser 151—although that is not arequirement. In circumstances where a native runtime viewer is utilized,the viewer may be arranged to render the wrap based on the object graph510 or based on an alternative final representation of the wrap suitablefor the specific platform.

The actual structure of the object graph 510 may vary in accordance withthe needs of a particular implementation. By way of example, in thenon-exclusive embodiment of FIG. 16, the object graph 510 includes anordered card list 512, a set of cards definitions 514 and an asset loadstate tree 515. The card list 512 represents the sequential order of thecards and provides a simple mechanism for supporting linear navigationthrough the card set. The card list may use a wide variety of differentformats. By way of example, a doubly linked list works well in manyapplications. With this arrangement, other than the first and last cardsin the wrap, each card is linked to the previous end next card in thelist. Thus the linked list serves as a mechanism for readily identifyingthe previous and next cards in the wrap which can be used whennavigating the wrap. That is, when a swipe is detected, the next orprevious card is identified by the linked list for rendering asappropriate based on the swipe direction. The first and last cardsinclude only a single link to the next or preceding card respectively.

The card definition set 514 includes a card definition 517 for each cardin the wrap. Each card definition 517 includes all of the componentobjects of the card and associates all of the relevant characteristics(e.g., assets, styles, behaviors, other attributes, etc.) with therespective component objects and any dependent component objects. If aspecial item such as a feed descriptor is associated with the component,then the card definition 517 will also include the binding to theassociated feed.

In some circumstances it may be desirable to have a set of one or morecards that are dependent upon a user selection, or an event, that occursin the context of a particular card. One example of such a circumstanceis the purchase transaction described above and illustrated in FIGS.8A-8H. Specifically, when a user selects the “Buy Now” button 327 oncard 316 (FIG. 8A), a set of purchase transaction cards 321-326 (FIGS.8B-8H) become available, whereas they would not have otherwise been partof the linear wrap sequence. That is, selecting “Buy Now” button 327causes a transition to card 321 (FIG. 8B)—which would not have otherwisebeen available to the user by simply swiping left. Once in the purchasetransaction card set, the user may navigate within and out of thepurchase transaction card set in the same manner that other cards arenavigated. One way to facilitate such navigation is to provide adependent card list 513 within the object graph 510 as illustrated inFIG. 16. The base card (card N) has a pointer to dependent card list 513that is activated by selection of the “Buy Now” button 327. The lastcard in dependent card list 513 points back to the base card N (or toany other appropriate card as designated by the wrap designer).

It should be appreciated that the dependent card list 513 can beindependent of the specific originating cards such that the samedependent card list can be accessed from multiple cards within card list512. By way of example, such an approach may be desirable, when multiplecards have “Buy Now” buttons that are intended to access the same checkout mechanism. To facilitate returning to multiple different originatingcards, the pointers to the originating card may take the form of avariable in the dependent card list with the value of the variable beingan identifier for the originating card.

The asset load state tree 515 is a data structure that identifies eachasset that is referenced in the wrap descriptor and indicates whetherthe referenced asset has been loaded into the runtime. In someembodiments, the asset load state tree takes the form of a tree ofsemaphores. Each time an asset is loaded, the corresponding entry (e.g.semaphore) in the asset load state tree is changed from a “not loaded”state to a “loaded” state. In this way, the runtime can quicklydetermine whether any given asset is already present, or needs to beretrieved, when rendering a card.

Referring again to FIG. 15, the behavior engine 530 includes a library531 of behavior definitions 60. In embodiments that support behaviorextensions 62, the behavior engine 530 is also arranged to obtainbehaviors extensions 62 from one or more external stores as necessary.Thus, when the deserializer 501 encounters a behavior declaration whileprocessing a wrap descriptor 40, the deserializer requests and receivesthe behavior definition corresponding to the declared behavior from thebehavior engine 530. Once a behavior definition has been retrieved, itcan optionally be cached or stored persistently in the behaviordefinition library 531 so that it is available for future use.

The behavior extensions 62 may be arranged as individual behaviordefinitions or in bundles or packages of behaviors. An advantage ofbundling behaviors into packages is that a set of behaviors can bedefined that are considered useful for particular functions (e.g.,e-commerce functions; supporting reservations, supporting chat sessions,etc.) while keeping the base runtime size small. Then, card templatedesigners can make use of any subset (or all) of the bundled behaviorswhen designing their templates. This allows the same bundle of behaviorsto be used for a wide variety of different cards designed by differentauthors. To facilitate the use of behavior extension packages, the wrapdescriptor or any card descriptor can include an Extension Identifier(not shown) that identifies any behavior extension bundle(s) that is/areused in that particular wrap/card. When the deserializer 501 comes tothe Extension Identifier, it notifies the behavior engine 530 of theneed for the identified extension package. Optionally, a DownloadedExtension Package List 533 may be maintained by the behavior engine 530or other appropriate component to provide a readily accessible mechanismfor determining whether a particular behavior extension package isalready present within the runtime. If the behavior engine 530 does notalready have the identified extension package, it requests theidentified package form the Runtime Viewer Server, behavior extensionsStore 162 or other suitable source.

Any time an extension package is downloaded, the associated behaviorscan all be stored in the Behavior Definition Library 531 and theDownloaded Extension Package List 533 (if used) may be updated toreflect the change. Often it will be desirable to cache or persistentlystore any retrieved behavior extensions within the behavior definitionlibrary 531 so that such extensions don't need to be downloaded againthe next time the extension is required by another wrap and/or the wrapis rendered in a different session. However, caching or persistentstorage is not a requirement and in other embodiments a variety ofdifferent extension management techniques can be employed.

As described above, the wrap descriptors 40 may include various types ofpresentation or styling information, in data structures that define howstyles should be associated with the various content. As thedeserializer 501 processes the wrap descriptor 40, it stores styleinformation, in the form of CSS class references, and/or literal CSSfragments, in the associated nodes of the object graph 510. Further,wrap descriptors 40 may include complete stylesheets, used to bind theCSS class references mentioned above to the intended presentationalrules embodied in those stylesheets. In embodiments that rely onexternal implementations of HTML and CSS renderers (e.g. the mobileweb-based embodiment, and any embodiments that rely on platform providedweb views, such as the WebKit web view provided by iOS, Android andother platforms) the binding of CSS classes to stylesheets may be leftto the external implementation to render the objects thus annotated. Inother embodiments, a separate binding mechanism may be provided toconform the presentation to match the intended presentation rulesembodied by the constellation of stylesheets, CSS fragments, and CSSclass references contained in the wrap descriptor 40.

In some embodiments, the runtime itself provides baseline stylesheets,used in the rendering of the core runtime user interface components.These stylesheets may also be available to be referenced from CSSclasses associated with individual nodes, as described above, to providestandard user interface treatments.

Further, in some embodiments, a standard set of extension stylesheetsmay be provided for inclusion by reference. In addition, certainextensions (e.g. a chat or shopping cart extension) may provide and loadtheir own stylesheets, to provide standard treatments, or extensibletreatments, for the rendering of associated UI elements.

The deserializer 501 has rules for handling all of the differentcomponent types supported by the runtime's component model. Thus, as thedeserializer steps through the wrap descriptor 40 it creates an objectgraph 510 that represents the wrap. Each item in the descriptor that isencountered is handled in accordance with the rules. A representative,nonexclusive deserialization process is illustrated in, and describedwith reference to, FIGS. 12A-12C.

In the example illustrated, when a wrap descriptor 40 is first received,any initial metadata such as the wrap id 42, the wrap name/title 44 andany other relevant information 45 is associated with a new wrap instanceas represented by step 802. The deserializer 501 then gets the next itemin the wrap descriptor (step 803).

At the wrap level, there are typically only a handful of different typesof items that will be encountered during deserialization. By way ofexample, these include metadata about the wrap as referenced above,cards (e.g., card descriptors 46), global components, and potentiallyglobal attributes. Of course the card descriptors 46 may themselvesinclude a wide range of different types of components as well as variousattributes (e.g., styles, behaviors, etc.) associated therewith todefine the structure, content and functionality of the associated cardsrespectively.

Referring again to FIG. 12A, if the next item encountered is a new card(as represented by decision 805), then a new card node (which isessentially a blank or empty card definition 517) is created in theobject graph 510 and the new card is added to the card list 512 asrepresented by 806. A corresponding “empty” new card is then created inthe DOM (807). After the new card has been created, the associated carddescriptor is processed to populate the associated card as representedby flow chart step 808. During the processing of the card descriptor,the deserializer effectively steps through the card descriptor topopulate the card with all of the components, attributes andfunctionality of the card defined by the card descriptor as described inmore detail below with reference to FIG. 12B. Once the card descriptorhas been deserialized, the logic passes to step 817 where it isdetermined whether any additional items are present in the wrapdescriptor.

At various locations within the present application, we have referred todifferent types of cards. In some embodiments, the different card typesare differentiated primarily by their content. Thus, for example, agallery card is simply a card that contains one or more gallery itemcomponents, a video card is a card that has a video (e.g. YouTube)channel, a checkout card is a card that facilitates a purchasetransaction, a feed card is a card that contains a feed component, awidget card is a card that contains a widget component, a location cardis a card that has a map/GPS component, etc. Therefore, if the new cardis anything other than a standard card, its nature will be definedduring the deserialization of its contents and there is no need todifferentiate between card types when the card node is first created inthe object graph. However, it should be appreciated that in otherimplementations, different types of card nodes (e.g., standard cardnodes, gallery card nodes, video card nodes, checkout card nodes, widgetcard nodes, location card nodes, etc.) can be created in the objectgraph based on the type of card that is being created, which may beexplicitly defined in the descriptor through the use of card type 73. Ifdesired, the runtime can be arranged to associate specific attributes(e.g., behaviors, functionality, styles, etc.) or even specificcomponents with a new card based on the card type.

Returning to FIG. 12A, if the next item encountered duringdeserialization isn't a card, but rather is a component that is notassociated with any particular card (as represented by decision 810),then the component is understood to be a global component and one ormore new corresponding component nodes are created in the object graph.Generally, as discussed above with regard to FIG. 28, a global componentcan be any type of component that is intended to be applied to multiple(or all of the) cards. There are multiple different ways that a globalcomponent can be represented in the object graph 510. In someembodiments, a new component node corresponding to the global componentis created in the object graphs card definitions 517 for each of thecards that the global component applies to (step 811). The correspondingcomponents are then created in the DOM (step 812). Thus, if the globalcomponent is associated with all of the cards, each of the cards willhave a corresponding component node. If the global component is onlyassociated with a subset of the cards, then a corresponding componentnode is created in each of the cards in that subset. As the globalcomponent descriptor is processed, any subcomponents and attributescontained in the global component descriptor are associated with each ofthe global component nodes in the object graph and DOM as represented byflow chart step 813. Thus, when separate component nodes are created foreach of the cards, the global component appears as if it is a componentof each of the cards.

Global components may be used for a wide variety of applications and aredescribed in more detail above with regard to FIG. 28 through FIG. 32.By way of example, one use case for a global component may be a logothat the wrap creator desires to associate with every card in a wrap.Since the global component applies to multiple cards, it is oftendesirable for the global component to be positioned after the carddescriptors in the wrap descriptor. However that is not a requirement.

In an alternative embodiment, a single node may be created for theglobal component in the object graph and DOM. Such an approach may bepreferred in certain circumstances such as when it is desirable for theglobal component to appear as an overlay for all of the cards in thewrap. In such a circumstance, the runtime can optionally be arranged todisplay the overlay in the same location as the user is flipping betweencards.

Regardless of which approach is taken, after the global component hasbeen processed, the logic proceeds to step 817 where it is determinedwhether there are additional items in the wrap descriptor.

In some circumstances it may be desirable to associate certainattributes (e.g., styles or behaviors) with the entire wrap as opposedto simply a particular card or component. An example use case of anattribute applied to the wrap might be a custom card transitionbehavior. For example, if the standard card transition behaviorgraphically mimics the appearance of the current card flipping to theside like a page would flip in a book, a custom card transition behaviormight graphically mimic the current card sliding to the side from thetop of a deck rather than “flipping.” An example of a global styleattribute might be a particular font or theme color that is intended tobe used throughout the wrap. Of course, these are merely examples andthe behaviors and other attributes that may be associated at the wraplevel is limited primarily by the imagination of the wrap authors.

Returning to FIG. 12A, if the next item encountered duringdeserialization is a attribute (e.g., a style, behavior, etc.) that isassociated with the wrap generally rather than any particular card orcomponent (as represented by decision 814), then the attribute isunderstood to be a global attribute and is associated with multiple orall of the cards as defined by the descriptor as represented byprocessing step 815.

It should be appreciated that the described wrap descriptor architectureis readily extensible. Therefore, other types of containers, componentsor functionality can be defined/added at any time. Therefore, if thenext item in the wrap descriptor is any other type of item supported bythe runtime viewer, then the item is processed appropriately asrepresented by step 816.

After the processing of any particular item has been completed, the nextitem is obtained and the process repeated thereby effectively steppingthrough the wrap descriptor until the entire wrap descriptor has beendeserialized. This process of stepping through the descriptor isrepresented in the flow chart by determination 817 which functionallyasks whether the wrap descriptor contains any additional items not yetprocessed. If so, the logic returns to step 803 where the next item isobtained and then processed in the same manner described. When theentire wrap descriptor has been processed (i.e., there are no additionalitems to the processed), the deserialization of the wrap descriptor iscompleted.

The deserializer 501 processes (deserializes) the card descriptors 46 bystepping through the card descriptor in substantially the same way. Onerepresentative card deserialization process (step 808 from FIG. 12A) isdescribed next with reference to FIGS. 12B and 12C.

In the example illustrated, once a card node has been created in theobject graph, any card metadata such as the card id 71, the cardname/title 72, the card type and/or any other relevant information isassociated with the card node as represented by step 818. Thedeserializer 501 then gets the next item in the card descriptor (step819).

The card defined by the card descriptor may be composed of a widevariety of different components. For example, if the next itemencountered is a text box component (as represented by decision 820),then a new text box object is created in the associated card definition517 in the object graph 510 (as represented by 821). The container orsub-container that the text box object belongs to is implicit based onthe descriptor structure. That is, when the text box is presented as acomponent of the card descriptor, then the text box is associated withthe card. Alternatively, if the text box is presented as a component ofthe wrap outside of the bounds of any particular card descriptor, thenit would be considered a global text box. Still further, if the text boxis presented as a part of a gallery item descriptor or other component,then the text box would be associated with that gallery item or othercomponent.

After the text box object has been created in the object graph, acorresponding new text box is created in the DOM (822). Typically,although not a requirement, the text intended to populate the text boxwill be included in-line within the descriptor. Thus, the appropriatetext is inserted directly into the text box object in both the objectgraph and the DOM.

In many circumstances a component (such as the text box or other type ofcomponent) will have one or more associated attributes (e.g. one or morestyles, behaviors, etc.) and/or it may include one or moresubcomponents. Thus, after the component has been “created” in theobject and DOM, the deserializer processes any attributes orsubcomponents associated with the component as defined by the componentdescriptor. This process will be described below with respect to FIG.12C and is represented in the flow chart of FIG. 12B by the elementlabeled “Go To 870 FIG. 12C”.

There are, of course, many types of components that may be included in acard other than text boxes. If the next item encountered duringdeserialization of a card descriptor is an image component (e.g., animage or photo as represented by decision 825), then a correspondingimage object is created in the associated card definition 517 in theobject graph 510 (as represented by 826). Like with other components,the container or sub-container that the image object belongs to isimplicit based on the descriptor structure. A corresponding image objectis then created in the DOM (827). Typically, the actual image asset ofinterest is identified by reference in the descriptor rather than beingincluded in-line. For example, the descriptor may contain a URL fromwhich the image asset can be obtained. Therefore, the deserializer addsan entry corresponding to the new image asset to the asset load statetree 515—and sets the entry to the “not loaded” state. At some point,the image asset is requested from its source (step 828). The actualrequest can be generated directly by the deserializer, or it can bedelegated to a different routine. In browser based runtime viewers,responsibility for the actual request may be delegated to the browser.Thus, the actual image request will often not be part of thedeserialization process, which is why the image request step 828 isshown in a dashed box in FIG. 12B.

After the image object has been added to the object graph 510 and DOM,the deserializer 501 processes the remainder of the image componentdescriptor as described below with respect to FIG. 12C. Thereafter thedeserializer moves on to the next item without waiting for the imageasset to actually be retrieved. The ability to continue processing thedescriptor while assets are being retrieved can greatly enhance thespeed at which wraps can be rendered at runtime.

Referring again to FIG. 12B, if the next item encountered is a videocomponent (as represented by decision 830), then a corresponding videoobject is created in the associated card definition 517 in the objectgraph 510 (as represented by 831). A corresponding video object is thencreated in the DOM (832). Videos are generally not stored in-line withinthe descriptor. Thus, like images, the actual video asset of interest isidentified by reference in the descriptor. Therefore, the deserializerhandles the video in much the same way as described above with respectto images. Accordingly, an entry corresponding to the new video asset isadded to the asset load state tree 515—and the entry is set to the “notloaded” state. The video is then requested (833) at the appropriate timebased on the runtime's or browser asset request rules. After the videoobject has been added to the object graph 510 and DOM, the deserializer501 processes the remainder of the video component descriptor in thesame manner that other component descriptors are handled as describedwith respect to FIG. 12C. Thereafter the deserializer moves on to thenext item without waiting for the video asset to actually be retrieved.

It should be appreciated that the actual requests to download referencedassets (e.g., images, videos, etc.) can be managed quite separately fromthe deserialization process. In some circumstances it may be desirableto request all referenced assets (images, videos, etc) as soon as theyare encountered by the deserializer. In other circumstances, it may bedesirable to manage the asset request in accordance with other assetrequest rule. For example, since videos typically require much moreresources than images, it may be desirable to request images immediatelyor first, while waiting to a later time to request videos. The latertime could be: (i) after some or all other reference items have beenreceived; (ii) when the video card is actually rendered or is withinsome predefined distance (e.g. one or two cards) from the active card;when a user hits “play”; or any other time determined to be suitable bythe runtime developer. In still other embodiments, the wrap templatedesigner could be given some level of control over the download requestorder. In still other circumstances, a browser based runtime maydelegate the requests to the browser so that the runtime has littledirect control over the timing of the requests.

Referring again to FIG. 12B, if the next item encountered is a widget(as represented by decision 835), then a corresponding widget object iscreated in the associated card definition 517 in the object graph 510(as represented by 836). A corresponding internal frame (e.g., aniframe) is then created in the DOM (837). A call is also sent to thesource indicated in the widget descriptor to obtain the content for theiframe (838). As previously discussed, the call will often containparameters to be passed to the source. When desired, the widget callscan be handled in a manner similar to the image or video asset requestsdiscussed above, including inclusion in the asset load state list.However, in other embodiments, it may be desirable to handle widgets ina different way or to provide different classes of widgets that arehandled in different ways. For example, in many implementations it maybe appropriate to download the widget content when the wrap isinstantiated. However, in other situations it may be more appropriate torequest the widget content only when the user opens the associated cardor activates a trigger. Regardless of the approach that is taken topopulate the widget with content, after the widget object has been addedto the object graph 510 and DOM, the deserializer 501 processes theremainder of the widget descriptor as described below with respect toFIG. 12C. Thereafter the deserializer moves on to the next item withoutwaiting for the widget content to actually be retrieved.

In some browser based embodiments, it may be desirable to add aninvisible event catching layer in front of the widget as described belowin the more detailed description of widgets at runtime. In suchimplementations, an empty container/frame is also added to the objectgraph in step 836. The event catching layer having the same size andposition as the widget and is arranged to appear in front of the widgetto ensure that any user inputs that occur over the widget can be caughtby the runtime. A corresponding frame (e.g., an HTML div element) wouldthen be added to the DOM as part of step 837.

Referring again to FIG. 12B, if the next item encountered is a link (asrepresented by decision 840), then a corresponding link is inserted intothe object graph (step 841) and a corresponding link is created in theDOM (842). Thereafter, the deserializer 501 processes any attributesassociated with the link component descriptors as described with respectto FIG. 12C.

If the next item encountered is a gallery item container (as representedby decision 851), then a new gallery item is created in the associatedcard definition 517 in the object graph 510 (as represented by 852).After the gallery item container has been created in the object graph, acorresponding new gallery item container is created in the DOM (asrepresented by 853). As suggested above, in some embodiments, thepresence of a gallery item effectively makes the associated card agallery card. However, in other embodiments, the gallery cards may havea distinct structure and gallery items may be only be used in suchgallery cards. In the component model illustrated in FIG. 14, thegallery item 594 is also a container, although it should be appreciatedthat when other component models are used, this would not necessarily bethe case.

After the gallery item has been created, the deserializer processes thegallery item descriptor as represented by 854. The gallery itemdescriptor can be processed in the same manner as the processing of thecard descriptor described herein with respect to FIGS. 12B and 12C,except that the components of the gallery item will be associated at thegallery item level rather than the card level and gallery items wouldtypically not contain other gallery items, although such an architecturecould readily be supported if desired.

Generally, attributes may be bound to any component, including containercomponents. Thus, an attribute can be bound to a content type componentsuch as text, an image, a video, etc., or to a container, such as acard, a gallery, a gallery item, the wrap itself or any other componentthat contains subcomponents. When the next item encountered duringdeserialization of a card descriptor 46 is an attribute that isassociated with the card generally rather than any particular cardcomponent (as represented by decision 845), then the designatedattribute is bound with the associated card node in the object graph andDOM (848). Thereafter, the logic proceeds to step 883 in FIG. 12C whereit is determined whether there are any remaining items in the carddescriptor.

It should be appreciated that the types of components listed above areby no means exhaustive. Rather, there can be a variety of other types ofcomponents in a cards descriptor and the same general processes or otherappropriate processes can be used to deserialize those component typesas well. For example, if feed components are used, the feed descriptorcan be deserialized in a similar manner, with the actual feed contentbeing obtained in accordance with the rules and parameters associatedwith the feed that is to be established. When the deserializer gets tothe end of the descriptor there are no more items to be processed andthe deserializing process is completed. The processing of other types ofcomponents is generally represented by box 848 in FIG. 12A.

After any component has been added to the object graph, the deserializercontinues to step through the component descriptor to identify anyattributes and/or subcomponents that are associated with the component.One such process is diagrammatically illustrated in FIG. 12C. Generally,after a component has been added to the object graph, the logicdetermines whether there are any items (e.g., attributes, subcomponents,etc.) associated with the newly defined component (step 870).

If so the next item is obtained as represented by step 872. If the nextitem is an attribute (step 874), the attribute (e.g., style or behavior)is associated with the component (step 876) in the object graph and DOMand the logic returns to step 870 where it looks for the next item inthe component descriptor.

If the next item is determined to be a subcomponent (step 877), thesubcomponent is processed recursively in the same manner as describedabove with respect to FIG. 12B, except that the subcomponent iscontained within its parent component.

As indicated previously, the model is extensible so that if other typesof items are defined that can be contained by a component, they can beprocessed appropriately in a similar manner as represented by box 879 inFIG. 12C.

After all of the items associated with a particular component have beenprocessed (i.e., there are no more items associated with the componentas represented by decision block 870), then the deserializer effectivelydetermines whether there are any more items associated with the card asrepresented by decision block 883. If so, the logic returns to step 819of FIG. 12B where the next item in the card descriptor is obtained andthe same process is repeated for that item. This flow continues untilthere are no more items associated with the card (the no branch ofdecision block 883 of FIG. 12C) at which point the processing of thecard descriptor is completed and the logic proceeds to decision block817 of FIG. 12A where it is determined whether the wrap descriptor hasany further items. The deserializer continues to step through the wrapdescriptor in the described manner until the entire wrap descriptor hasbeen processed and the wrap is ready to be rendered. It should beappreciated that the particular container or parent that any particularcomponent belongs to is implicit based on the descriptor structureitself.

Although the deserializing process has been described in the context ofthe flowchart of FIGS. 12A-12C to simplify the description, it should beappreciated that in actuality, the logic of the deserializing algorithmcan vary widely. Various described functions can be delegated and somecan be performed in parallel and in different orders than the specificdescribed embodiments. Typically the runtime will have deserializingrules associated with each component type that it supports and thoserules can vary widely from the specific examples given.

Referring back to FIG. 15, the event handler 506 is arranged to handleevents relevant to a wrap that are received once the wrap is rendered.As discussed above with respect to FIG. 12, any time a detected eventimpacts the wrap, the event handler will update the object graphappropriately, which in turn causes the DOM to update appropriately.

The architecture of the event handler 506 and its affiliated structuresmay vary widely. In some embodiments, the event handler 506 is arrangedmodularly to include an event handling core 507 that works inconjunction with a large number of specific event handling components(specific event handlers). Use of such an architecture is contemplatedwith the embodiment described above with respect to FIG. 12 andcomponents affiliated with one such embodiment of event handler 506 aredescribed with reference to FIGS. 17 and 18. Many of the events that areexpected to be received in conjunction with a wrap are navigationrelated UI gesture events. Examples of such events might include swipegestures (e.g., left, right, up or down swipes), taps (often used forselection of an item), etc. Discrete handlers may be provided for eachsuch gesture, or multiple handlers may exist for a single gesture, indifferent contexts. For example, a first specific handler may beprovided to handle left swipe events, a separate second specific handlermay be provided to handle right wipe events and so on. Furthermore, thespecific action that is appropriate in response to a particular gestureevent may vary based on the card. For example a left swipe willtypically have an associated behavior of flipping to the next card.However, in certain circumstances a left swipe may invoke a differentaction (e.g., when the user is viewing the last card in a deck a leftswipe gesture may invoke a card flip bounce-back animation) and invoke adifferent handler, based on that different context. In a highly modularsystem, different handlers can be used to handle the same event inconjunction with different cards having different intended behaviors.For example, a first left swipe handlers can be utilized to handle leftswipe events for most cards, while a second (and different) left swipehandler can be used to handle left swipes when the final card is active.Of course, the same principle can be applied to any card.

FIG. 17 illustrates selected functional components of the event handlercore 507. The event handler core 507 includes a handler rules engine610, a handler registry 612, and a current handler set list 614. Thehandler registry 612 is a registry of all of the handlers that areavailable to the runtime. If a particular wrap requires a handler thatis not present in the runtime, the event handler or other suitablemechanism can request the missing handler from a server side handlerstore or other appropriate location. The current handler set list 614identifies all of the handlers that are currently active. That is, allof the handlers that are appropriate for wrap in its current stateincluding the currently active card.

The handler rules engine 610 defines that rules by which the varioushandler are made active or inactive at any time. The specific rules mayvary widely and may include immutable rules that cannot be changed,default rules that may be overridden by the appropriate instructions,special rules for particular cards/states, etc. Special and overriderules may be provided in any appropriate manner, as for example, bydefinition or reference in a wrap or card descriptor, as part of anextension etc. Using the left swipe handler example, the handler rulesmay designate a default left swipe handler which transitions the wrap tothe next card in response to a left swipe. However, the rules mayfurther mandate that a default “last card left swipe handler” be usedwhen the currently active card is the last card in the wrap. Stillfurther, the rules may permit the wrap or card to identify a differentleft swipe handler for use in place of the default handler(s) a specificcircumstances, or as long as the wrap remains active. The alternativeleft swipe handler, may exhibit different behavior. The behaviordifference can be small as might be appropriate when the wrap authorsimply wants to use a different card transition animation, or it may bemore complex. In either event, any time there is a object graph modelstate change, the current handler set list 614 is updated based on thehandler rules to add any newly required handlers and to eliminatehandlers that are no longer active.

Referring next to FIG. 18, components associated with a representativeevent handler 506 will be described. In the illustrated embodiments, thecomponents include the event handler core 507, feed event dispatcher620, a scheduler 630, connection manager 635, navigation event handler540 and state manager 560. The event handler core 507 is generallyarranged to handle a number of different types of events includingsystem events, UI events 651, sensor based events 653, Geo based events655 and a variety of other types of events 657. UI events 651 includeany events generated in response to user inputs including variousgestures inputted on a touch sensitive display, keyboard entries, mouseclicks, three dimensional gestures performed over a touchless gesturerecognition platform, inputs from other user I/O devices etc. Sensorbased events include inputs from any sensors connected to the computingplatform, as for example the accelerometers commonly used in cell phonesand other mobile devices, heart rate or other biometric monitors,thermistors, etc. Geo events include events that are triggered basedupon the user's geographic location. There are, of course a wide varietyof other events the computing system may be arranged to receive ordetect, including system events, registry based events, etc. Systemevents are generally events generated by the computing system as forexample responsive to a call from another process. An example of aregistry source of event is a network registry—which may, for exampleinitiate a “Wi-Fi available” event in response to the detection of a newWi-Fi network when no networks were previously available.

The navigation event handler 650, which is sometimes referred to hereinas the “pan handler”, as it responds to panning events in the userinterface, and includes the specific handlers that function to handlenavigation based events. The navigation handler 540 can optionally beintegrated into the event handler core 507 if desired. Alternatively,other event handler core functionality can be delegated to other typesof handlers similarly to navigation handler 540.

Feed event dispatcher 620 is arranged to dispatch feed related events.As such, it communicates with the event handler core 507 and connectionmanager 635 as appropriate. The connection manager 635, in turn, managesconnections as appropriate for any particular feed.

Scheduler 630 has a plurality of timers and is arranged to trackscheduled events. When the time arrives for a scheduled event, thescheduler 630 notifies the event handler core 507 or the feed eventdispatcher 620 as appropriate to handle the scheduled events. Either thefeed event dispatcher 620 or the event handler core 507 can scheduleevents using scheduler 630. For example, if a particular polling feedrequires updates every 30 seconds, the feed event dispatcher 620 wouldregister the polling requirements with the scheduler 630. The scheduler630, in turn would notify the feed event dispatcher every 30 seconds ofthe need to poll again. In response to each notification, the feed eventdispatcher 620, in turn, manages the mechanics of the poll, which mightrequire opening a new connection, polling the source, returning theresults to the associated card or component and closing the connection.

Widgets at Runtime

When a wrap that incorporates a widget component is received by theruntime viewer 50, the widget descriptor may be processed in much thesame manner as other components except that the runtime is arranged tocreate an internal frame within the associated card when a component oftype widget is encountered. The content for the internal frame (e.g.,the HTML formatted content) is then obtained from the identified sourcerather than being defined within the wrap descriptor. From thestandpoint of the runtime viewer, retrieval of the widget content ismuch like retrieval of other assets such as images, videos, etc.,although the call is generally more complex due to the inclusion of theparameters with the call.

When the deserializer 501 encounters a widget component in a particularcard descriptor, it creates an internal frame (e.g., an HTML iframe) tocontain the widget. This is accomplished by first associating an iframewith the corresponding node in the object graph and then creating theiframe in the DOM. The dimensions (height and width) of the iframe, aswell as the location of its origin will typically be defined in thedescriptor, although this is not a requirement. Indeed, in somecircumstances such as widgets designed to present a gallery, it may bedesirable not to assign a fixed height to the gallery. When the locationand dimensions are defined, the corresponding dimensions are assigned tothe iframe when it is created.

The runtime initiates a call to the widget server specified in thesource identifier 126 passing the widget parameters 130 to the widgetservers as part of the call. The call may be made directly by theruntime or through the browser. Based on the parameters received, thewidget server knows the content to send to the runtime viewer topopulate the iframe and to define its presentation and functionality.More specifically, the server sends an HTML document to be rendered inthe iframe. The HTML document contains the desired content, scripts,etc. in a format suitable for rendering in the associated iframe. Thereceived HTML document is then included as the content of the iframe inthe DOM in step so that the desired widget content is rendered when theassociated card is rendered.

As will be appreciated by those familiar with the art, iframes arestandard HTML containers that are currently utilized in a variety of webapplications and web developers are quite familiar with their usage,thereby providing a flexible and well understood way for developers toprovide wraps with customized content and/or functionality. However, itshould be appreciated that other internal frame structures can be usedin place of iframes in alternative embodiments.

Virtually any type of web content can be rendered in a widget's iframe.When desired, the content can contain links, scripts that impartbehaviors and/or other useful constructs. For example, the content mayinclude a link or trigger that lunches a cul-de-sac or opens a newbrowser tab outside of the wrap. The card and widget designer(s) havecomplete control over the card's functionality and the targets to whichthe wrap user may link. Thus, for example, a card designer may wish todirect wrap viewers to a particular web page using either a new tab orcul-de-sac type structure.

As discussed above, the runtime viewer may be deployed in a variety ofdifferent ways, including, for example, by being executed on a generalpurpose browser, being incorporated into an application or applet, or inany other suitable manner. Execution on general purpose browsers presentsome potential challenges that are more easily avoided in anapplication/applet. For example, most general purpose browsers arearranged to pass any user inputs that occur in the region of an iframedirectly to the iframe. This can be problematic in the context ofrendering a wrap because it is possible that a wrap related navigationalgesture (as for example a swipe gesture) could be inputted or occur infull or in part over the region of the display allocated to the widget'siframe. When such an event occurs, standard browser operation wouldsimply pass the gesture to the widget without notifying the wrap runtimeviewer. Therefore, in any runtime viewer implementation designed toexecute on such a browser that supports iframe based widgets, it isimportant to provide a mechanism for catching wrap related user inputssuch that they can be executed by the runtime.

There are a number of ways to insure that the runtime viewer receivesthe appropriate user inputs. For example, in some implementations, theruntime is arranged to “block” all user input events from being capturedby the internal frame so that all user input events are passed to theruntime rather than being passed directly to the widget. Many widgetswill be “display only” widgets in that they do not need to directlyinteract with any user inputs. The Date Countdown widget illustrated inFIG. 26 is a good example of a display only widget. Generally, therewill be no need to ever pass user input events to a display only widget.However, many other widgets, are more “interactive” in that theyfacilitate or prompt user selections/inputs which must be passed on tothe widget or require messages to be passed from the widget to theruntime viewer. Therefore, when interactive widgets are desired, theruntime viewer must be configured to facilitate communications betweenthe runtime and the widget.

One way to facilitate user input event blocking is to place an invisibleevent catching layer in front of the iframe to intercept all user inputevents associated with the widget/iframe as briefly discussed above inthe description of widget deserialization illustrated in FIG. 12B. Thatis, for every widget that is created in a wrap instance, a transparentevent catching frame layer is created by the runtime. The event catchingframe then directs the user input events to the runtime for processing.

In an HTML based browser, the event catching layer may take the form ofan HTML div element which is simply a container unit. The div element isplaced in front of the widget and preferably has the same size andlocation as the widget frame. This assures that the runtime will receiveany user inputs made within the widget frame. There is no need to definethe event catching frame (div element) within the wrap descriptor.Rather, the runtime's widget processing rules may be arranged to simplyinsert an appropriately sized event catching frame in the object graphin front of the widget frame any time that a widget is encountered. Theevent catching frame causes a div element to be created in the DOM. Inother embodiments, the event catching frame can be explicitly defined inthe card or widget descriptor.

Since the runtime receives all user input events, any events that areinterpreted as wrap navigational events are handled by the runtime in anormal manner as described above with respect to FIG. 12. Any other userinputs occurring within the region allocated to the widget are thenpassed to the widget as would normally occur when user inputs are madewithin the iframe bounds. Thus, any non-navigational user inputsoccurring within the iframe that are not interpreted as a wrap relatedevent are passed to the widget.

When the runtime viewer is executed on a web browser such that the wrapis rendered in the browser, the runtime viewer and the iframe will be indifferent domains. In general, most web browsers are not able to passevents between frames in different domains. Therefore, to supportpassing events between the runtime and the widget is such browsers, amechanism must be provided to pass the events.

In non-exclusive embodiments, the widget is arranged to include awidget/runtime communication script tag to facilitate message passing.Thus, when the widget is loaded at runtime, the script tag triggers theloading of a message passing API via JavaScript. The message passing APIfacilitates passing messages between the runtime viewer and the widgetiframe and can be used to inform the widget of incoming user inputevents as well as to pass messages from the widget to the runtime. Themessages may be passed using any appropriate event messaging protocol.By way of example, one currently popular event messaging protocol thatis suitable for this purpose is the window.postMessage method, althoughit should be appreciated that any other suitable event message passingprotocol may be used in other embodiments.

When a messaging protocol such as window.postMessage is used, the userinput events transmitted in the event messages may not be directlyunderstood by the HTML that defines the content of the widget. When thatis the case, it will be desirable to provide the widget and/or browserwith scripts suitable for translating the event messages into eventsthat can be interpreted by the widget. In general, such translationscripts are arranged to determine what kind of element was accessed andthe proper action so that the widget acts as if it were directlyaddressed. In practice, a set of translation scripts may be provided towidget developers that can translate typical widget events for typicalwidget components, such as a tap or click event on a button, a text box,a form, a pull-down or pop-up menu, etc. so that the widget developersdon't need to try to program the translation scripts to support mostcommon GUI constructs.

In some circumstances the user action is fairly simple and can be fullyhandled directly by the translation scripts. A good example of such asituation is a simple button tap or click which can be simulated quiteeasily.

In other circumstances more complex responses are needed and it may bedesirable to apply focus to the target element to thereby temporarilybypass or drop at least a portion of the invisible layer so thatsubsequent input events on that element pass directly to the widget. Agood example of this type of circumstance is when a tap or click actionoccurs on a text field. In such a circumstance, it may be desirable topop up a text input element (e.g., a keypad) and have subsequent keypadentries pass directly to the widget where they would presumably beentered into the text field without ever being intercepted by or knownto the runtime. To facilitate this, focus may be applied to the textinput element (keypad) and potentially the text box so that any inputevents made directly on the keypad/text box pass directly to the widget.Alternatively, when appropriate, the focus could be applied to theentire widget or another designated portion of the widget so that anyinputs on the widget/designated portion of the widget would passdirectly to the widget. When focus is applied, a callback is placed onthe text input element so that when focus is lost (e.g. a “blur” eventoccurs), the widget will send a blur message back to the runtime viewerthat causes the runtime viewer to restore the event interception. Aswill be appreciated by those familiar with the art, focus may be lost ina variety of different manners. For example, the focus may be lost whenthe user makes an input indicating that the text entry has beencompleted—(e.g. as may occur when a “return” or “enter” key isselected). Another example of a situation where focus may be appropriateis when the user activates a dropdown menu. Of course, focus may beappropriate for a variety of other GUI constructs as well. As will beappreciated by those familiar with JavaScript, focus and blur areJavaScript constructs designed to facilitate event delegation.

Some widgets will also need to communicate back to the runtime. Suchwidget to runtime viewer communication can be supported using the samemessaging API. For example, in some implementations of the transactionflow described above with respect to FIG. 8A-8H, the transaction widgetis arranged to open a cul-de-sac to a web page when a “proceed tocheckout” button is selected so that the transaction can be completedusing the merchant's website. To facilitate this, the widget may pass amessage to the runtime viewer requesting that the runtime viewer open acul-de-sac to a particular website and potentially passing variousparameters relevant to the transaction. Again, window.postMessage workswell for this purpose.

In most of the embodiments described above, runtime related user inputevents are caught by the runtime before they are passed to the widget.However, it should be appreciated that in alternative embodiments, alluser inputs in the region of the widget iframe could be passed to thewidget and the widget could be provided with event recognition codesuitable for identifying wrap navigational gestures. In such anembodiment, the wrap navigational gestures would then be passed on tothe runtime viewer.

Wraps as Messages

The described wrap packages 10 are essentially cloud based portable dataobjects that can readily be distributed using a wide variety ofelectronic techniques including messaging, posting and inclusion aslinks in documents, articles or other electronic communications. Thewrap package 10 thus allows authors to take applet and websitefunctionality and make them consumable as a message, delivered in anarrative storytelling format. This allows the transformation of an appor website functionality into a portable, sharable, and savable wrappackage 10, that can be distributed like electronic messages (e.g.email, SMS, text) or within the content of a media feed, such as socialmedia feeds like Twitter or Facebook, a news feed like Reuters orBloomberg Business, etc.

Not only are the wrap packages 10 easy for publishers and others todistribute, but viewers and other recipients of a wrap may also readilyshare a wrap as a “message” with their friends, family, coworkers,colleagues, etc. This is a powerful construct that can greatly extend orenhance the market (or other target segment) reach and penetration of awell designed wrap since a “message” from a friend or acquaintance isoften more favorably received than a message from an unknown party.Neither applets nor websites are well suited for such viraldistribution.

For example as illustrated in FIG. 7M, media sharing triggers 381 and383 can be used to share the wrap package 310 with others via varioussocial media or content distribution platforms. In the illustratedembodiment, these include Facebook, and Twitter, although it should beappreciated that similar sharing triggers can be provided to facilitatesharing the wraps using virtually any desired social media or contentdistribution platform.

In the embodiment shown in FIG. 7M, media triggers are provided withinor embedded in the wrap itself to facilitate sharing. However, it shouldbe appreciated that the wraps can be shared in a number of other ways aswell. For example, the cover 15 that includes a URL associated with thewrap (e.g., the wrap ID 42) can be posted on a social media site orfeed, emailed to others, or otherwise distributed using an electroniccommunication protocol or platform.

Since the set of cards 14 that make up a wrap package 10 areencapsulated as a data object and can be sent as a unit, the wrappackage 10 can also readily be stored on a viewer's device if the viewerso desires. Contrast this with a conventional multi-page website whichis not designed to be persistently stored on a viewer's device as aunit, even if individual pages may sometimes be cached. It alsoeliminates third party aggregator (e.g., the Apple App Store; GooglePlay, etc.) control over the delivery of a company's services/messagesto its customers as occurs in the distribution of conventional apps.

Integrating Wraps into Media Feeds

One of the powers of the described wrap architecture is that wraps canreadily be integrated into a wide variety of different platforms,including any type of media feed. For example, a wrap can readily beposted into and viewed in the context of a social media feed such as aTwitter, Facebook, Instagram, Pinterest, etc. Similarly, a wrap canreadily be integrated into other types of feeds, such as a news feed(i.e., Reuters, Bloomberg business news, etc.), an RSS feed, or justabout any other type of media feed. In yet other embodiments, wraps canbe integrated within various blogs and micro publication platforms suchas Tumblr, etc.

The ability to insert and distribute wraps as messages within mediafeeds and blogs is a very powerful construct for facilitating widespreadand even viral delivery of wraps to a wide variety of potential viewersand/or consumers in the content consumption environments that theyprefer. The ability to consume the wrap within the context of a socialmedia feed, for example, provides numerous advantages. First, it allowsthe viewer to view the wrap without closing out of, or navigating awayfrom, the media feed they are already consuming. Second, by defining thecontent of the wrap to be similar or related to the subject matter ofthe feed already being consumed, the effectiveness of the wrap, alongwith viewer engagement, are both significantly improved. Third, theappearance of a wrap as a “message” within the feed of similar contentsignificantly reduces the “friction” for the viewer to select andconsume the wrap, as opposed to for example a banner ad, which arecommonly ignored.

Conversely, a wrap social media card can be configured to integrate asocial media feed into a wrap such that the social media feed can beviewed within the context of a wrap, without forcing the user to leavethe wrap and launch a separate app or open a new browser window. Fromthe context of a wrap author, this has the potential to increase the“stickiness” of the wrap. That is, a user may be more inclined to spendmore time viewing and interacting with the wrap if they are able to viewdesirable social media content, without having to close out of the wrapand/or open or otherwise navigate to a separate social mediaapplication. For example, a wrap dedicated to a specific event, such asa music concert, a sporting event, etc. can include a social media cardthat allows the viewer to view, and post to, a social media streamassociated with that event.

Of course, there are a wide variety of other circumstances in whichfacilitating interaction between a wrap and media feeds will bedesirable. By way of example, a few representative embodimentsintegrating wraps with social media are described below with referenceto FIGS. 19 to 25.

FIG. 19A illustrates a Twitter feed 720 viewed on a mobile device 712.The feed 720 includes a wrap cover 725 included as part of a specifictweet 722. As previously discussed, the wrap cover 725 has an image andan embedded link suitable for accessing an associated wrap 700.

As illustrated in FIG. 19B, selection of the cover 725 launches the wrap700 associated with the cover 725 in-line within the twitter feed 720.When the wrap 700 is launched, the first card 701 is displayed in placeof the cover 725, but still within the twitter feed 720. That is, thewrap 700 appears within a frame of the twitter feed that was previouslyoccupied by the cover 725—although the aspect ratio of the frame mayoptionally change to accommodate the wrap aspect ratio when the coverdoes not have the same aspect ratio as the wrap as can be seen bycomparing FIG. 19B to FIG. 19A.

The now rendered wrap 700 may then be navigated, in situ, within thetwitter stream 720 using swipe navigation as previously described. Forexample, swiping left on first card 701 causes the wrap to flip to thesecond card 702 as seen in FIG. 19C. Swiping left again on the secondcard 702 causes the wrap to transition to third card 703 as seen in FIG.19D. Thus in the same manner as described above, the individual cards,including any gallery cards (not illustrated), can be navigated withinthe context of the twitter stream 720, by horizontal and/or verticalswiping.

It should be understood that a wrap included in a media feed, like anywrap, may be of any desired length and may be browsed using the samestandard wrap navigation techniques. In addition, any of theabove-mentioned types of cards may be incorporated into the displayedwrap, including gallery cards, transaction cards, appointment cards,booking and/or reservation cards, chat cards, cards incorporating feeds,etc.

Since the wrap is effectively incorporated into a tweet, the viewer isable to perform the standard Twitter function(s) on the tweet (and thusthe wrap) through the use of standard Twitter tools. Thus, the viewer isable to reply to the tweet by selecting reply button 730, retweet thepost (and thus the wrap) by selecting retweet button 731, mark the tweetas a favorite by selecting favorite button 732, copy a link to thetweet, embed the tweet and/or utilize any other Twitter functionalitythat is available to the user. Again, this provides a powerful constructfor distributing and sharing wraps.

In the embodiment illustrated in FIG. 19, the wrap 700 is displayedin-line within the Twitter feed 720. In various alternative embodiments,selection of the cover may cause the wrap to open into a new containerrather than appearing in-line within the Twitter feed. The new containermay take the form of a new pane, a new tab, a new window or any otherGUI construct that is appropriate for the underlying platform.

In another non-exclusive embodiment, FIGS. 20A-20C show the same firstthree cards of the wrap 700 rendered in a “full screen” mode on a mobilephone. In other words when the wrap cover 725 appearing within tweet 722of the feed 720 is selected, the wrap 700 is rendered within the entirescreen of the display of the consuming device, as illustrated. Invariations of this embodiment, the wrap 700 may alternatively berendered in a top-justified container, a bottom justified container, a“¾” size container within the center of the display screen, or in otherspecific locations relative to the screen.

With any of these embodiments, a “close” button or similar construct maybe provided to allow the user to return to the twitter feed afterfinishing with the wrap. This type of behavior is sometimes referred toherein as a cul-de-sac. More generally, a cul-de-sac is a construct inwhich activating a link in a first container opens the target in a newcontainer, and thereafter, closing the new container returns the user tothe originating container.

In the embodiment of FIGS. 20A-20C, a close button 740 is overlaid on asmall portion of the wrap. That is, the close button 740 is an activetrigger and can be seen on each of the cards, regardless of which cardis currently displayed. Selection of the close button 740 closes thewrap and returns the user to the feed 720 (e.g., back to the view ofFIG. 19A). Of course the close button 740 or any other container closingmechanism can be provided and/or displayed in a wide variety of otherforms. By way of example, common close container constructs used inother cul-de-sac applications include: (i) close buttons located to theside or above the active display region; and (ii) a “cancel” or “close”link or button in a toolbar located above or below the active displayregion. In such embodiments, the close functionality would be associatedwith the container rather than the wrap itself. In such circumstances,the closing of the container would typically, although not necessarily,be handled by the browser rather than the wrap itself.

In yet another embodiment as illustrated in FIG. 20D, the new containermay also include a Twitter toolbar if desired so that the user canperform standard Twitter operations such as reply 730, retweet 731, ormark as a favorite 732, etc.

In the embodiment illustrated in FIGS. 19B-19D, the aspect ratio of thewrap rendered within the Twitter feed is substantially the same as theaspect ratio of the wrap when rendered “full screen” on the mobiledevice 712, as seen in FIGS. 20A-20C. However, that is not always arequirement.

In other embodiments, the wrap can be rendered in a different aspectratio as illustrated in FIG. 21, which shows card 703 of wrap 700rendered at a different aspect ratio within Twitter feed 720. Of course,the same aspect ratio would preferably be used for all of the cards inthe wrap.

Twitter, like many media feeds, can be viewed using either a generalpurpose browser window or with a dedicated Twitter app running on theconsuming device. Regardless of which is used, a wrap runtime viewer isutilized to render the wrap. When a media feed is viewed using abrowser, the wrap runtime viewer may be executed by the browser. Whenthe feed is viewed using a dedicated Twitter app, the runtime engine maybe either incorporated into the app so that the wrap can be vieweddirectly in the Twitter app, or the Twitter app may launch a browserthat in turn renders the wrap.

Regardless of whether the runtime viewer is executed by a browser or byan app, the processes used to obtain the wrap descriptor and the runtimeviewer may be the same as described above, as for example, withreference to FIG. 11. When the wrap is rendered, again either within abrowser or within an app, it is rendered into the designated container,which as described above, can be in-line within a frame defined by amessage within the media stream (e.g., FIGS. 19A-19D), full screen size(e.g., 20A-20D), or a partial screen size such as top or bottomjustified or ¾^(th) sized, etc.

In embodiments that utilize an overlay to provide a close wrapfunctionality, the runtime must be informed to add the close button 740overlay. Of course, in other embodiments, the close functionality may behandled directly by the browser without involving the wrap. In eithercase, selection of the close button closes the associated container(e.g., pane, tab, etc.) and returns the user to the original media feed.

While the above examples were provided within the context of a Twitterfeed, it should be understood that in no way should these examples belimiting. On the contrary, wraps can be incorporated into just about anytype of media feed in substantially the same manner as described.

For example, FIG. 22 illustrates the incorporation of a wrap into a postin a Facebook news feed. In this example, Facebook feed 750 includes apost 752 having wrap cover 725 included therein. Similar to thatdescribed above, selecting the cover 725 causes the wrap 700 to belaunched and rendered in a manner similar to any of those describedabove with respect to the Twitter example. For example, the wrap may bedisplayed in-line within the Facebook feed 750 (as seen in FIG. 22B) orin a separate container (not shown), which can take any form (e.g., afull screen, partial screen, a cul-de-sac, etc.). Similarly, the wrapruntime can be executed by a browser used to display the wrap, or it maybe incorporated into a Facebook app itself.

When a wrap is integrated into a Facebook post, the palette of Facebooktools that accompany posts can be used to interact with and/or share thewrap. For example, the wrap post can be shared with others using theShare tool 760, the user can comment on the wrap post using Comment tool761 or “like” the wrap post using Like tool 762. Of course any of theother Facebook supported functionalities including embedding the wrappost on a website, etc. and be accomplished as well.

Although the integration of wraps into social media have been describedprimarily, in the context of Twitter and Facebook, because those are twocurrently popular social media platforms, it should be appreciated thatwraps can be integrated with virtually any other now existing or laterdeveloped media platform. By way of example, other suitable andcurrently popular media platforms including news feeds, sports or gamingfeeds, social media such as Instagram, Pinterest, MyFitnessPal,PhotoCircle, Vine, etc. Of course, there are a very wide variety ofother media platforms that can be used as well. Additionally, wraps canreadily be integrated into various blogs and micro publication platformssuch as Tumblr, etc.

Media Feed Cards

Another way to integrate a wrap with media is to include a media feedcard as part of the wrap. A media feed card may be arranged to displayor render a media feed directly in a wrap itself.

Referring to FIGS. 23A through 23D, a series of diagrams illustrating anexemplary wrap package with a media feed card is shown. In thisparticular example, the wrap package is by the San Francisco 49'ersfootball team to fans following the 2015 NFL draft. In FIG. 23, a card771 showing the name of the drafted players in each round is shown, inFIG. 23B, a gallery card 772 providing a profile of each drafted player(note for FIG. 23B, just the individual windows of the gallery card areshown for the sake of clarity), FIG. 23C is a media feedcard—specifically, a Twitter card 773 that includes a Twitter feed, FIG.23D is a transact card 774 for purchasing 49 er team merchandise.

FIG. 23C illustrates a Twitter media feed card 773 that includes aTwitter feed embedded within the card. As seen therein, the Twitter card773 displays a Twitter data feed in the context of a wrap. The data feedthat is displayed can be any data feed that the card author desires toinclude. For example, a wrap having to do with a football team mightinclude a social media card that displays the team's Twitter data feed,a data feed associated with a particular hashtag, etc. In otherembodiments, the user may be able to select a desired data feed from amenu of multiple available data feeds, or more generally, a searchdialog box could be included on the card to allow a user to searchparticular terms. As fans consume the wrap, they are capable ofconsuming the various tweets posted in the feed or contribute and/orinsert their own tweet, all within the context of the feed card 23C ofthe wrap package.

In order to create a social media card such as Twitter card 773, thelayout of the card is defined in the same manner as other cards and itscomponents and attributes are defined by the corresponding carddescriptor. A data feed descriptor may then be used to define thelocation from which the data feed is to be obtained. The actual contentsof any media feed card descriptor can vary significantly. By way ofexample, a representative, nonexclusive, polling data feed descriptorsuitable for establishing a Twitter data feed may have the followingstructure:

Twitter feed: (787) Type: live (105) Source: https://twitter.com/ (107)Lifecycle: while-card-visible (109) Target: container (111) Parameters:(115) lang: en (791) meta charset: utf-8 (792) hashtag: [@hashtag#1,@hashtag#2,] (793) name: [$user_name] (794) Password:[$twitter_password] (795) * * *

In this embodiment, the twitter data feed descriptor 787 is a “live”server side event driven data feed as indicated by “live” data feed type105. The data feed source is https:/twitter.com/ as indicated by source107. The lifecycle of the data feed is only while the card is visible asindicted by lifecycle 109. The descriptor further includes a set ofparameters 115 that define the nature of the data feed to be retrieved.The actual parameters that are appropriate for any particular socialmedia data feed will depend heavily on the APIs required by the socialmedia platform (e.g. Twitter) in order to define the desired data feedand may vary significantly based on the nature of the data feed that thecard author seeks to facilitate. In some circumstances, that may includemetadata related parameters such as the language and character set to beused in the data feed. This type of information is represented byparameters 791 and 792 in the example above—e.g., name/value pair 791(lang: en) indicating the use of the English language; and name/valuepair 792 (meta charset:utf-8) indicating the character set to be used inthe data feed. Other parameters may be used to define the content to beretrieved. This type of information is represented by parameter 793(hashtag: [@hashtag#1, @hashtag#2]) which represent specific hashtags tobe included in the data feed. Still other parameters may be used toidentify and/or authenticate the viewer. This type of information isrepresented by parameters 794 and 795 (e.g. name value pair 794 name:[$user_name] indicating the Twitter user name of the person viewing thewrap, and name value pair 795 Password: [$twitter_password]). Of course,the specific parameters that are appropriate to define any particulardata feed may vary widely and in some circumstances, the number ofparameters utilized in the descriptor can be quite high.

If desired, a social media card 770 can be configured to provide theuser's personalized data feed thereby allowing the user to view tweetsfrom all of the people/entities that they follow as illustrated in FIG.24. In order to support personalized data feeds, the card 770 needs tohave an appropriate authentication mechanism. The authenticationmechanism can be explicit by requiring the user to input their user nameand password into appropriate dialog boxes on the card or may be moreimplicit by maintaining the user authentication information in a cookieor state descriptor associated with the user/wrap.

Another social media card is shown in FIG. 25, which illustrates aFacebook card 780 arranged to facilitate Facebook access. Facebook card780 is quite similar to the previously discussed Twitter card exceptthat it facilitates access to Facebook.

Social media cards can be created to facilitate interaction withvirtually any type of social media from within a wrap. In each case, thecard author has the ability to define the scope of the cards use. Insome applications, it may be desirable to limit the card's use forviewing and posting to specific predefined data feeds relevant to thewrap's publisher. In other circumstances, it may be desirable tofacilitate more complete access to the associated platform. The actuallevel of access facilitated in any particular social media card islargely up to the card author.

Generating Wrap and Card Descriptors

Referring to FIG. 33, a flow chart 450 illustrating the steps ofgenerating card descriptors 46 for each card 14 in a wrap 10 is shown.As previously noted, a card descriptor 46 is a collection of dataobjects. Thus, generating a card descriptor 46 generally involvesgenerating and assembling individual data objects for all thecomponent(s), content(s) and feature(s) contained in or associated witha the card 14, including any global component(s).

In initial step 452, a first component (either a component that isspecific to the card or a global component designated for the card) isselected. Thereafter, data object(s) are generated for the component(step 454) along with any associated content, regardless if inline orreferenced by an identifier such as a URL. In addition, data object(s)are generated for attribute(s) (step 458), style(s) (step 460),trigger(s) (step 462) and/or defined and/or declared behavior(s) (step464) associated with the component. In decision step 466, it isdetermined if data object(s) have not yet generated for are anyadditional components (again, either card specific or global). If yes,then steps 454 through 466 are repeated for each component. If not, thenin step 470, any meta data is associated with the card. Finally, thecard descriptor is generated from all the data object(s) and the metadata (step 472). The card descriptor thus contains everything needed torender the card at runtime.

It should be noted that the flow chart 450 described above similarlyapplies to gallery cards. For each gallery item container of the gallerycard, the above process is repeated for each component. When all thecomponents have been exhausted for a given gallery item, the process isrepeated for the next gallery item. A card descriptor is then generatedfor the gallery card when the above-described iterative process iscomplete for all of the gallery items.

Referring to FIG. 34, a flow diagram 480 illustrating the steps ofgenerating a wrap descriptor 40 is illustrated. In the initial step(482), a first card of the wrap is selected and its card descriptor isgenerated (step 484) using the process described above with respect toFIG. 27. Thereafter, in decision 486, it is determined if there are anyadditional cards in the wrap package. If yes, then the next card in thewrap is selected or incremented (step 488) and the card descriptor forthat card is generated in step 484. This process is repeated until acard descriptor is generated for all the cards in the wrap, asdetermined in decision 486. Then in step 490, any meta data isassociated with the wrap package. Finally, in step 492, the wrapdescriptor is generated from all the card descriptor(s), any globalcomponents, and any meta data 45 associated with the wrap 10.

The wrap descriptor 40 is thus a collection of card descriptors 46, eachexpressed as a collection of data objects defining the structure, layoutand content for each of the cards 14, plus any global components. Assuch, the wrap descriptor 40 includes everything necessary to render thewrap upon runtime.

Benefits and Advantages of Wrap Packages

Wrap packages 10 offer a number of benefits and attributes currently notavailable with conventional methods of distributing content, such aswith PDFs, web sites, or stand-alone apps. Since cards 14 can besequenced and authored to include media content, applicationfunctionality, and e-commerce related services, wrap packages 10 havethe unique ability to narrate a story, in a book-like format, thatcaptures and holds the attention of the viewer, while also offering an“app” like user experience. As such, wrap packages 10 offer a newweb-based platform for storytelling, communicating ideas, and deliveringhighly visual and functional user experiences. Wrap packages 10 thusenable a new business paradigm for selling, advertising, publishing,increasing brand loyalty, offering services, and contacting and engagingnew and old customers alike, all ideally delivered to consumers on theirmobile devices, where they spend their time and consciousness. Wherebusinesses used to have to build destinations (e.g., websites) ormonolithic systems (e.g., “apps”), they can now, instead, provideconsumers with wrap packages 10, that are delivered like messages, andthat provide the user experiences and functionality they really want andneed. As a result, wraps 10 create opportunities for business toinnovate and improve products and services, leveraging the mobile web inways not before possible, because a convenient, enabling interface andplatform did not previously exist.

Wrap packages 10 are also like interactive messages that can be easilyshared, delivered over the mobile web, and locally stored. With theability to share, distribute over the mobile web and locally store,popular wrap packages can readily go viral.

Wrap packages 10 are also preferably delivered using a SaaS (Software asa Service) model, meaning wrap packages are delivered only on anas-needed basis.

Wrap packages can be authored by anyone, from an individual with littletechnical or design skills, to large and sophisticated enterprises.

Wrap packages 10 can be distributed narrowly to a specific or targetedperson or persons or widely distributed to many, many persons.

Wrap packages 10 can be written once and can run on just about anybrowser enabled device. As a result, wraps are not platform, operatingsystem, or device dependent.

Since wrap packages 10 can be easily generated and optionallydynamically updated with new content, wrap packages can be used as adigital “corollary” or “companion”, accompanying the sale or rental ofgoods and/or services. For example, wrap packages can be created anddistributed as an “Active Receipt” accompanying the sale or rental of agood or service. The merchant can thus provide through the wrap package10 ongoing contact and support to on-board, up-sell and/or cross-sellthe customer with ancillary goods and/or services, potentially for theentire life cycle of the product or service, all delivered in a digitalformat that never gets lost or misplaced. Accordingly, wrap packages canbe used as an essential component of any product or service, deliveringbetter customer service and creating new selling opportunities.

In summary, wrap packages 10 introduce the “narrative web”, which is astorytelling mobile user interface, delivered over a cloud-basedplatform, ushering in a digital evolution of mobile marketing andcustomer relationship management. As a marketing tool, wrap packages 10have the unique ability to increase mobile engagement, lead generation,and conversion, enabling businesses to increase sales, improve loyalty,and enhance customer relationships and loyalty. Wrap packages 10 thusoffer a compelling business proposition by solving one of the biggestproblems in the mobile space of today; namely the lack of connectivitybetween apps. With wrap packages 10, however, consumers and other userscan enjoy a multi-function app-like experience, without having to be inan app, download an app, or open any apps.

Finally, while many of the benefits and attributes of wrap packages 10are realized on mobile devices operating on the mobile web, it should bemade clear that there is nothing inherent with wrap packages 10 thatlimit their usefulness or functionality in non-mobile environments. Onthe contrary, wrap packages 10 can also be used, and all the samebenefits and attributes realized, on non-mobile devices, such as desktopcomputers and/or smart TVs for example.

The present invention is thus intended to be broadly construed to coverany system and method, such as carousel ads for example, that enablespublishers and marketers to tell sequenced stories with (i) acombination of images, photos, text, video and other types of media,(ii) a swipe-able format that enables viewers to navigate the mediadisplayed in one screen shot or frame to the next, and (iii) includesembedded app-like functionality and/or links to other locations thatprovide additional information or such functionality and/or services.Consequently, the present application should not be construed to justthose specific embodiments as described herein.

In the primary described embodiments, all of the behaviors are declaredrather than being stored in-line within the descriptor. Thus, thedescriptor itself does not have any programmable logic. In manyembodiments, the declared behavior are all defined within the runtimeviewer such that the runtime view can readily associate the desiredbehavior with the wrap, card or component as appropriate in a meantimeinstance of the wrap. It should be appreciated that this is aparticularly powerful framework for enhancing portability of the wraps.With the descriptor/mrntime viewer approach, a single item (thedescriptor) can be used to define all of the content and functionalityof a set of cards that can be rendered on virtually any platform. Thedeclared functionality is provided (or obtained) by the runtime viewerswhen the wrap is to be rendered so that the author of the wrap is notrequired to know or understand any of the idiosyncrasies of anyparticular platform. The runtime viewer may be a generic runtime viewer(e.g., a viewer executable by a conventional browser) or may be nativeviewer customized for a particular platform. Regardless of theunderlying platform, the runtime viewer handles the tasks of associatingthe declared behaviors with the wrap/cards/components which frees thewrap author and/or authoring tool from having to ensure that desiredbehaviors are programmed correctly for all of the different platformsthat the wrap may be rendered on.

In most implementations, all of the sizeable assets that serve ascontent of the wrap are referenced in the wrap by appropriateidentifiers rather than being stored directly in the wrap. This againsignificantly enhances portability by keeping the size of the descriptorsmall while facilitating the use of rich media content.

From the foregoing it should be apparent that the described wrappackages provide businesses with a powerful tool for engaging theircustomers, suppliers, employees or other constituents in a format thatis particularly well tailored for display on mobile devices.

Although only a few embodiments of the invention have been described indetail, it should be appreciated that the invention may be implementedin many other forms without departing from the spirit or scope of theinvention. For example several specific wrap descriptor structures havebeen described. Although such descriptor structures work well, it shouldbe appreciated that the actual descriptor structure may vary widely. Forexample, in some embodiments some special behaviors can be definedwithin a wrap descriptor if desired. Such in-line behavior definitionmight be particularly useful in association with certain behaviorextensions that are not otherwise readily available. For example,JavaScript can be included within a JSON object and various otherdescriptor structures. Thus, when JSON descriptors are used, selectedbehaviors or behavior overrides can be defined in-line using JavaScriptif desired. Although programmed functionality can be included in somecircumstances, it should be appreciated that liberal definition ofbehaviors within a wrap tends to defeat some of the primary advantagesof the described descriptor/runtime viewer framework.

In many implementations much of the actual content of the wrap will bereferenced by the descriptor rather than being stored in-line within thedescriptor. However, the balance between in-line storage and referencesto external assets in any particular wrap descriptor may be widelyvaried anywhere from 100% referenced content to (at least theoretically)100% in-line content—although the later is less desirable for media richcontent and again, begins to defeat some of the advantages of using thedescriptor approach. The choice between in-line and referenced contentwill typically be dictated in large part by the relative size of thecontent. For example, text, which tends to be very compact, is generallymore suitable for inclusion in-line, whereas more graphic media, images,videos and/or audio files are typically more efficiently referenced.

A few different methods of and architectures for serving wrap packagesand constructing runtime instances have been described herein. Althoughonly a few approaches have been described in detail, it should beapparent from the foregoing that a wide variety other methods andarchitectures can be used as well. Therefore, the present embodimentsshould be considered illustrative and not restrictive and the inventionis not to be limited to the details given herein, but may be modifiedwithin the scope and equivalents of the appended claims.

What is claimed is:
 1. A component model for wrap packages of cards, thecomponent model including a multiplicity of different component types,the component types including: a standard card container type, wherein astandard card container is arranged to contain all components of anassociated standard card that are to be displayed when the associatedstandard card is displayed; a gallery card container type, wherein agallery card container is arranged to contain a gallery of galleryitems, and wherein when an instance of a wrap package is rendered notall of the gallery items all of standard cards in the instance have thesame frame size and aspect ratio; a text box component type, wherein atext box component is configured to contain text; and an image componenttype, wherein an image component is configured to contain an image or aphoto; and wherein, when an instance of a wrap package is rendered allof the standard cards in the instance have the same frame size andaspect ratio.
 2. A component model of as recited in claim 1, furthercomprising a video component type, wherein a video component isconfigured to contain an associated video.
 3. A component model asrecited in claim 1, further comprising: a widget component type, whereina widget component is configured to create an internal frame within anassociated card, and wherein the content of the internal frame can beobtained from an external source.
 4. A component model as recited inclaim 2 wherein the internal frame is an HTML iframe.
 5. A componentmodel as recited in claim 1 further comprising a feed component type,wherein a feed component is configured to establish a web feed to obtaincontent for the component.
 6. A component model as recited in claim 5wherein the web feed has a feed format selected from the groupconsisting of RSS and Atom.
 7. A component model as recited in claim 1further comprising a transaction component type, wherein a transactioncomponent is configured to support a purchase transaction.
 8. Acomponent model as recited in claim 1 further comprising a chatcomponent type, wherein a chat component is configured to support a chatsession.
 9. A component model as recited in claim 1 further comprising alocation component type, wherein a location component is configured toobtain a current location of a computing device that renders theinstance.
 10. A component model as recited in claim 2, furthercomprising: a widget component type, wherein a widget component isconfigured to create an internal frame within an associated card, andwherein the content of the internal frame can be obtained from anexternal source; a transaction component type, wherein a transactioncomponent is configured to support a purchase transaction; a chatcomponent type, wherein a chat component is configured to support a chatsession; and a location component type, wherein a location component isconfigured to obtain a current location of a computing device thatrenders the instance.